反射
反射概述
- 反射是指对于任何一个Class类,在运行的时候都可以得到这个类的全部成分。
- 在运行时,可以得到这个类的构造器对象:Constructor
- 在运行时,可以直接得到这个类的成员变量对象:Field
- 在运行时,可以直接得到这个类的成员方法对象:Method
- 这种运行时动态获取类信息以及动态调用类中成分的能力称为Java语言的反射机制
反射的关键
- 反射的第一步都是先得到编译后的Class类对象,然后就可以得到Class的全部成分
反射获取类对象
- 对象.getClass();
- Class.forName(“路径+包名”)
- 类名.class
反射获取构造器对象
方法 | 说明 |
---|---|
Constructor<>[] getConstructors() | 返回所有构造器对象的数组(只能拿public的) |
Constructor<>[] getDeclaredConstructors() | 返回所有构造器对象的数组,存在就能拿到 |
Constructor getConstructor(Class<?>…parameterTypes) | 返回单个构造器对象(只能拿public) |
Constructor getDeclaredConstructor(Class<?>…parameterType) | 返回单个构造器对象,存在就能拿 |
Constructor类中用于创建对象的方法
符号 | 说明 |
---|---|
T newInstance(Object…intitargs) | 根据指定构造器创建对象 |
public void setAccessible(boolean flag) | 设置为true,表示取消访问检查,进行暴力反射(所有对象皆可暴力) |
反射获取成员变量
方法 | 说明 |
---|---|
public[] getField() | 返回所有成员变量对象的数组(只能拿public) |
Field[] getDeclaredFields() | 返回所有成员变量对象的数组,存在就能拿 |
Field getDeclaredField(String name) | 返回单个成员变量(只能拿public) |
Field getDeclaredField(String name) | 返回单个成员变量对象,存在就能拿 |
Field类中用于取值和赋值的方法
方法 | 说明 |
---|---|
void set(Object obj,Object value) | 赋值 |
Object get(Object obj) | 取值 |
反射获取方法对象
方法 | 说明 |
---|---|
Method[] getMethods() | 返回所有方法对象的数组(只能拿public) |
Method[] getDeclaredMethods() | 返回所有方法对象的数组,存在就能拿到 |
Method getMethod(String name,Class<>…parameterTypes) | 返回单个成员方法对象(只能拿public) |
Method getDeclareMethod(String name,Class<>…parameterTypes) | 返回单个成员方法对象,存在就能拿到 |
Method类中用于触发执行的方法
符号 | 说明 |
---|---|
Object invoke(Object obj,Object…args) | 运行方法。参数一:用obj对象调用该方法;参数二:调用方法的传递参数(没有不写);参数三:方法的返回值:方法的返回值(如果没有就不写) |