获取反射入口(class对象)的三种方法

要想操作反射,必须先拿到反射的入口

1,通过通过Class.forName("全类名")

try {

Class> perClazz = Class.forName("reflect_fanshe.Person");

System.out.println(perClazz);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

2,类名.class

Class> perClazz2 = Person.class;

3,对象.getClass()

Person person = new Person();

Class> perClazz3 = person.getClass();

三,根据反射入口对象(class)获取类的各种信息

可以用一个类的反射入口class对象获取类的所有信息

例1:perClazz.getMethods() 获取此类的所有public方法(父类的,实现接口的,自己的)

Class> perClazz = null;

try {

perClazz = Class.forName("reflect_fanshe.Person");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

Method[] methods = perClazz.getMethods();

//遍历所有方法

for (Method method : methods) {

System.out.println(method);

}

}

例2:获取所有的构造方法

获取反射入口(class对象)的三种方法

例3: 获取父类

获取反射入口(class对象)的三种方法

例4:获取当前类(只有本类的)的所有方法和属性,包括私有的

获取反射入口(class对象)的三种方法

获取反射入口(class对象)的三种方法

重要:可以获取当前类的对象,并通过对象调用类的方法

四,通过反射获取对象的实例,并操作对象

1,class.newInstance() ,并强转类型,然后就可以操作对象了,主要是调用方法。

获取反射入口(class对象)的三种方法

2,操作属性,可以操作类里面的public属性和private属性

如果属性是private,正常情况下是不允许外界操作属性值,这里可以用Field类的setAccessible(true)方法,暂时打开操作的权限

获取反射入口(class对象)的三种方法

调用方法也一样,可以调用私有的方法,null是因为这个方法没有参数

获取反射入口(class对象)的三种方法

五,在 程序执行中,动态的决定调用的类,以及方法

在本例中,程序执行之前,程序根本不知道具体的类和方法名是什么,需要执行时解析properties文件,但是反射就可以办到。

配置文件:

获取反射入口(class对象)的三种方法

反射机制:


获取反射入口(class对象)的三种方法


分享到:


相關文章: