- 在刚开始的时候,我们一直进行的是正向操作,即根据包名.类名找到类,进而产生类的实例化对象,现在,我们的反射指的是对对象的反向处理操作,所谓的“反”,就是根据对象来取得对象的来源信息,下面是关于反射中四大核心类
1. Class类—》用来描述整个类信息
取得Class类的对象有三种方式:
a. "类的实例化对象.getClass()"--->该方法有Object类提供;
b."类.class"-->直接根据某个具体的类来取得Class类的实例化对象;
c."Class.forName(String className)"-->该方法由Class类提供;
注:除了第一种方法会产生普通类的实例化对象,其他两种都不会产生;
取得Class类对象后,我们就要利用对象干点事了,最直接的一个好处:可以通过(1)反射实例化对象:
“Class类对象.newInstance()”–》取得实例化对象,等价于无参构造;
(2)反射取得父类信息
a. “Class类对象.getPackage()”—>取得类的包名称
b .”Class类对象.getSuperClass()”–>取得父类对象
c. “Class类对象.getInterface()”—>取得实现的父类接口
*2. Constructor类*
A: 取得Constructor类对象有两种方法:
a. "Class类对象.getConstructor(参数类型.class)"--->取得指定参数类型的构造
b. "Class类对象.getConstructors()"--->获得类中全部构造
B: 通过Constructor类对象实例化对象:
“Constructor类对象.newInstance("")”--->等价于有参构造
3. Method类
A: 取得类中普通方法:
a. "Class类对象.getMethods()"-->取得全部普通方法
b. "Class类对象.getMethod('方法名',参数类型.class“”)"-->取得指定普通方法
B:调用普通方法:
. "方法名.invoke(对象名,设置方法参数)"-->调用普通方法
4.Field类
A:父类中取得全部属性
"Class类对象.getFields() : Field[]
B:父类中取得指定名称属性
"Class类对象.getField("属性名字")": Field
C : 本类中取得全部属性
"Class类对象.getDeclaredFields() : Field[]
D: 本类中取得指定名称属性
"Class类对象. getDeclaredField(String name)" : Field
E: :由Field类提供两个方法用来操作属性:
<1> “.Field类对象.set(调用对象,“设置属性参数”)”---》设置属性内容
<2> "Field类对象.get(调用对象)"----》取得属性内容
——————————————————————————————**THANKS**——————————————————————————————————————————————————