反射:
JAVA反射机制是在运行状态中,动态获取的信息以及动态创建对象,调用对象的方法的功能
获取字节码文件对象:
方式一:通过对象的getClass方法
方式二:类名.class直接获取
方式三:通过Class类的forName静态方法返回Class对象
Class:字节码文件类,该类的每一个对象代表一个类。通过字节码文件对象,我们可以获取该类的构造方法、成 员变量、普通方法等信息。
不带declared返回的公共访问权限的
带declared返回的声明的
如果返回的构造、成员变量、成员方法是私有的,或者我们没有访问权限,可以调用setAccessible,将访问权限检查设置为true,处于关闭状态即可,这个过程叫做暴力访问。
Constructor:构造方法
public T newInstance(Object... initargs) 构造方法创建对象
Field:成员变量、属性、域
public Object get(Object obj) 获取指定对象的属性值
public void set(Object obj, Object value) 设置指定对象的属性值
Method: 普通方法
public Object invoke(Object obj, Object... args) 通过指定的对象调用该方法
反射应用场景:
1反射绕过泛型检查
反射ArrayList类中参数为Object类型的add方法,调用该方法时,可以添加任意类型的值。
如果一个集合指定了泛型Integer,通过以上反射到的add方法,仍然可以添加其他类型的值。
2通过配置文件动态反射类与方法
当逻辑中固定的完成反射创建某个类与反射调用某个方法后,其类名与方法名可以从配置文件中读取,从而达到动态创建不同的类,调用不同的方法的目的。
|
|