反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java的反射机制
通过Java的反射机制可以读取与修改字节码文件(.class文件)
Java的反射依赖Class类、Field类、Method类、Constructor类进行,获取后三者需要先获取Class
类 | 描述 |
java.lang.Class | 代表整个字节码。代表类。 |
java.lang.reflect.Field | 代表字节码中的属性字节码。代表类中的属性 |
java.lang.reflect.Method | 代表字节码中的方法字节码。代表类中的方法。 |
java.lang.reflect.Constructor | 代表字节码中的构造方法字节码。代表类中的构造方法。 |
在Java中,一个类存在一个相对应的Class类对象
一个类被编译完成后,将生成一个对应的Class对象,保存为同名的.class文件,其中存储了该类的运行时类型信息
- //三种获得Class对象的方式 与 获取父类的Class对象
- public class Part01 {
- public static void main(String[] args) throws ClassNotFoundException {
- //本质上class01、class02、class03是(地址)相同的 因为一个类的Class对象只会存在一个
-
- //通过全限定名获得
- Class class01 = Class.forName("cn.alan.reflection.part_01.User");
-
- //通过实例对象获得
- User user = new User();
- Class class02 = user.getClass();
-
- //通过类名获得
- Class class03 = User.class;
-
- //获取父类的Class对象
- //可视为另一种获取Class对象的方式 即通过子类获取
- Class class04 = VipUser.class;
- Class class05 = class04.getSuperclass();
- }
- }
注:对于基本数据类型的封装类,可采用.TYPE来获取对应的基本数据类型的Class对象