反射
作用: 在 运行状态 中, 获取任意一个类的构造, 从而创建对象, 获取指定办法或属性, 并执行办法.
这种在运行状态动静获取信息以及动静调用对象办法 (动静加载机制) 的性能被称为 java 的反射机制.
反封装
获取类构造 Class
Class c = 包名. 类名.class
或者
Class c = 对象.getClass()
或者
Class.forName("包名 + 类名")
对于形式 3, 如果无奈找到给定的全限定名对应的类, 则会抛出 ClassNotFoundException
异样.
获取构造方法 Constructor
通过获取的 Class 对象, 调用办法
getConstructor(参数列表)
或者
getDeclaredConstructor(参数列表)
从而或者指定参数列表的构造方法.
或者通过 getConstructors()
和getDeclaredConstructors()
获取所有构造方法
其中 getDeclaredConstructor
只能获取私有权限的构造方法, 而 getDeclaredConstructors
能够获取所有权限的构造方法.
获取构造方法之后, 即可通过 newInstance(参数列表)
办法创建对象. 对于非公有权限的构造方法, 须要通过 setAccessible(true)
设置疏忽拜访查看.
获取成员办法 Method
在获取类构造 /Class 对象之后, 能够通过
getMethod(办法名, 参数列表)
或者getMethods()
和
getDeclaredMethod(办法名, 参数列表)
或者getDeclaredMethods()
获取该类下的指定成员办法或者所用成员办法.
而后通过办法 invoke(对象, 参数列表)
执行该办法
同样, 对于非公有权限的办法须要通过 setAccessible(true)
设置疏忽拜访查看.
获取成员属性 Field
获取成员属性的形式与获取成员办法的过程根本相似
须要通过办法
getField(属性名)
或者getFields()
和
getDeclaredField(属性名)
或者getDeclaredField()
获取指定名称的属性或者所有属性, 而后调用其 get/set 办法
同时通过 setAccessible(true)
设置疏忽拜访查看.
获取注解
获取类构造, 办法, 属性之后, 能够通过
getAnnotations(注解类型.class)
获取其上的注解的对象, 而后调用对应的注解内的办法, 获取注解外部的值.