Reflect笔记
基础
结构信息
Class c = Class.forname("类的名称");
从类的名称创建类对象。class.getName();
获得类的名称 会带上包名,例如com.java.test.App
class.getSimpleName();
获得类的简单名称,例如App
class.getInterfaces();
获得类的接口,是一个数组,可以通过Arrays.toString()输出;class.getModifers();
获得修饰符,得到一个代表修饰符的数字;- 可以通过
Modifier.toString
(数字) 得到字符串,如public final
成员变量
Filed[] f = class.getFileds();
获取所有public
属性class.getDeclaredFileds()
获取所有权限的属性f.getName
获得属性名字f.getType
获得属性类型
构造方法
class.getConstructors()
所有构造方法class.getDeclaredConstructors()
所有权限的构造class.getConstructor()
指定的构造方法class.getDeclaredConstructor()
所有指定构造方法- 通过
constructor.newInstance()
构造新对象
成员方法
getMethods()
获得所有方法getname();
获得名字getModifiers();
获得修饰符getReturnTypes();
获得返回类型
操作
使用反射操作属性(不安全)
- 获取类的完整路径字符串
- 根据类的完整路径获得类对象
- 使用
set(obj,值)
进行对相应属性的修改 f.getXxx(obj)
获得obj该属性的值
使用Method执行方法
m.invoke(obj)
具有返回值
invoke
简单点来说,就是将一个方法(method
)运用到具体的类上
比如我有一个类Person
,中间有属性age
得到Person
的getAge
方法后
使用f.invoke(person_1,Object[])
来对这个具体的对象使用方法