优秀的编程知识分享平台

网站首页 > 技术文章 正文

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

nanyue 2024-09-06 20:25:47 技术文章 7 ℃

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

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:获取所有的构造方法

例3: 获取父类

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

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

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

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

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

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

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

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

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

配置文件:

反射机制:


最近发表
标签列表