一、反射
1. 反射是用来做框架的
2. 一个类由字段,方法组成,反射就是加载类,解剖出类的各个组成部分
二、加载类(Class类)
1. 是做反射的第一步
2. Class代表某个类的字节码
3. 加载类通常是用Class类中的forName(String className)方法加载类,当然还有其他方法加载类
package com.cwt.reflect;
public class Demo1 {
//加载类的三种方法
public static void main(String[] args) throws ClassNotFoundException {
// 加载类的三种方法
// 第一种
Class class1 = Class.forName("/T_reflect/src/com/cwt/reflect/Person");// 括号中是类的完整名称
// 第二种
Class class2 = new Person().getClass();
// 第三种
Class class3 = Person.class;
}
}
三、反射出类的各个组成部分
1. 首先看下Class中一些常用的方法
(1)getConstructor(Class<?>... parameterTypes)
返回某一个公共构造函数,如果是构造函数是公共的则调用这个方法
(2) getField(String name)
返回某一个公共字段,如果字段是公共的,则可以调用这个方法
(3) getMethod(String name, Class<?>... parameterTypes)
返回某一个公共方法。如果方法是公共的则可以调用这个方法
(4)getDeclaredConstructor(Class<?>... parameterTypes)
返回一个 Class 对象所表示的类或接口的指定构造方法。如果构造函数是私有的则调用这个方法
(5)getDeclaredField(String name)
返回一个 Field ,如果字段是私有的则调用这个方法
(6)getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个 Method ,如果方法是私有的,则调用这个方法。
2. 如何通过上面的一些方法来反射出类的各个组成部分,看下面代码