反射
反射
神奇海螺getClassLoader() 获取类加载器
class->描述Class对象的类为Class类
构造->描述构造对象的类为Constructor类
方法->描述方法对象的类叫做Method类
属性->描述属性对象的类叫做Field类
获取Class对象
getClass() 获取类对象
forName(“类的全限定符”) 获取类对象
.class 通用静态属性,可以获取类对象
获取构造(使用获取的Class对象获取,clazz代表Class对象引用)
clazz.getConstructors() 获取所有public的构造
clazz.getConstructor(class>... parametertypes) 获取指定public的构造,传递参数类型的Class对象
通过构造创建对象:
T newInstance(class>… parametertypes) 通过构造创建对象,传递参数类型的Class对象
clazz.getDeclaredConstructors() 获取所有构造,包括私有
clazz.getDeclaredConstructor(class<?>… parametertypes) 获取指定的构造,包括私有,传递参数类型的Class对象
获取方法(使用获取的Class对象获取,clazz代表Class对象引用)
clazz.getMethods() 获取所有public的方法
clazz.getMethod(String name,class>... parametertypes) 获取指定的public的方法,传递方法名称和参数类型的Class对象
使用方法:(使用方法对象调用)
Object invoke(Object obj,Object args) 执行指定的方法,传递调用对象和参数列表
clazz.getDeclaredMethods() 获取所有方法,包括私有
clazz.getDeclaredMethod(String name,class>… parametertypes) 获取指定的方法,包括私有,传递方法名称和参数类型的Class对象
获取属性(使用获取的Class对象获取,clazz代表Class对象引用)
clazz.getFields() 获取所有public属性
clazz.getField(String name) 获取指定public属性,传递属性名称
使用属性:(使用属性对象调用)
get(Object obj) 获取属性值,传递调用者对象
set(Object obj,Object value) 设置属性值,传递调用者对象和设置的值
clazz.getDeclaredFields() 获取所有属性,包括私有
clazz.getDeclaredField(String name) 获取指定属性,包括私有,传递属性名称
解除私有权限:Constructor,Method,Field
setAccessible(true) true为解除私有,false为默认访问权限
注解:
自定义注解
public @interface 注解名{}
可以定义的数据类型:
8种基本类型,String类型,Class类型,枚举类型,注解类型,以及数组
特殊:属性定义时语法和抽象方法一样,使用时和属性赋值一样
使用时读取类/方法/属性上的注解,读取注解信息,执行其他操作
使用:
AnnotatedElement(接口)
使用Class对象调用
isAnnotationPresent(Class<?> clazz) 判断该类是否存在注解
getAnnotation(Class<?> clazz) 获取该类上的注解对象
元注解:(父注解)
控制注解的生命周期
控制注解的使用位置
@Target 控制注解使用的位置
@Retention 控制注解的生命周期
反射
获取Class对象的方式
1 使用实例化后的class对象引用调用Object的getClass()
2使用.Class 静态属性获取Class类对象
3 使用Class类下的forName(String Classname)获取Class类对象,参数为包名加类名
Constructors为构造方法对象
Field为成员变量对象
Method为普通方法对象
newInstance(Object…initargs) 对Constructor反射回来的构造方法实例化对象。
getDeclaredConstructors() 返回Constructors对象的一个数组,这些对象反映此Class对象表示的类声明的所有构造方法
getConstructors() 返回Constructors对象的一个数组,这些对象反映此Class对象表示的类声明的所有公共(public)构造方法
getConstructor(Class>...parameterTypes) 返回Constructors对象,它反映此Class对象所表示的类的指定公共(public)构造方法
getDeclaredConstructor(Class>…parameterTypes) 返回Constructors对象,它反映此Class对象所表示的类或接口的指定构造方法
getFields() 返回一个Field数组,包含Class对象中所有公共(public)成员变量
getDeclaredFields() 返回一个Field数组,包含Class对象中所有成员变量
getField(String fieldName) 返回一个Field,包含Class对象中指定的公共(public)成员变量
getDeclaredField(String fieldName) 返回一个Field,包含Class对象中指定的成员变量
getMethods() 返回一个Method数组,包含Class对象中所有公共(public)方法
getDeclaredMethods() 返回一个Method数组,包含Class对象中所有方法
getMethod(String Name,Class<> ) 返回一个Method,包含Class对象中指定的公共(public)方法
getDeclaredMethod(String Name,Class<> ) 返回一个Method,包含Class对象中指定的方法
获取公共的方法或构造方法或成员变量时会返回本类以及父类的所有公共的方法或构造方法或成员变量。
获取所有的方法或构造方法或成员变量时只会返回本类所有的方法或构造方法或成员变量。
Method下的方法invoke(Object obj,Object…args)调用底层方法。
setAccessible() 启用或禁用访问安全检查的开关。true指取消访问安全检查,false指启用访问安全检查,默认值为false。(例如:检查你使用的方法是否为可用方法,如果是private则不可用,是public则可用)。访问安全检查比较耗时,反射执行中可关闭访问安全检查提升效率。


