Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
关于class
1、Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性
2、对象照镜子后(反射)可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。
3、对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。
一个 Class 对象包含了特定某个类的有关信息。
4、Class 对象只能由系统建立对象
5、一个类在 JVM 中只会有一个Class实例
反射机制或者类有三种方法:
- //1 直接通过类名.Class的方式得到
- clazz = Person.class;
- //2 通过对象的getClass()方法获取,这个使用的少(一般是传的是Object,不知道是什么类型的时候才用)
- Person person= new Person();
- clazz = person.getClass();
- 所有类的对象其实都是Class的实例。
当我们把Person中的默认的无参构造函数取消的时候,比如自己定义只定义一个有参数的构造函数之后,会出现错误
- //3 通过全类名获取,用的比较多,但可能抛出ClassNotFoundException异常
- clazz = Class.forName("com.java.reflection.Person");
class类的newInstance()方法,创建类的一个对象,实际调用的类的那个 无参数的构造器(这就是为什么写的类的时候,要写一个无参数的构造器,就是给反射用的。
获取一个类的所有方法:getMethods()
获取一个类的所有构造函数:getConstructors();
获取一个类的所有字段(属性): clazz.getDeclaredFields();
三、反射机制的作用
1.在运行时判断任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法;
4.在运行时调用任意一个对象的方法;
5.生成动态代理。