- 获取Class实例的三种方式
Class实例:Class实例对应这加载到内存中的一个运行时类。
//1
Class clazz = String.class;
//2
Person person = new Person();
Class clazz1 = person.getClass();
//3.参数为全类名
Class clazz2 = Class.forName("reflection.Person");
//第三种方式最常用,因为能体现使用反射的动态性
-
对Class类的理解:
面向对象的思想是万物皆为对象,那么把内存中运行时类也可看做是对象,并把他们归类为Class类。实际中一个Class类实例对应着运行时的一个类。 -
创建Class对应运行时类的对象的通用方法。以及这样操作,需要对应的运行时类构造器方面满足的要求。
//首先获取运行时类对应的Class实例clazz
Object object = clazz.newInstance();
//1. 必须要有空参构造器
//2. 权限修饰符的权限要够,通常设置为public
- 如何通过反射调用类的方法:
//获取运行时类所对应Class的对象实例
Class clazz3 = Class.forName("reflection.Person");
//获取对应的Method类对象实例
Method method = clazz3.getDeclaredMethod("hello");
//设置方法的可访问性为true
method.setAccessible(true);
//创建一个运行时类的对象实例
Person person2 = (Person) clazz3.newInstance();
//把运行时类的实例传入invok方法,并且调用其方法。
method.invoke(person2);