反射机制就是可以把一个类,类的成员(属性、方法)当成一个对象来操作,也就是说,类,类的成员,我们在运行的时候可以动态的去操作它们。
所有的Java类都继承了Object类,在Object类中定义了一个getClass()方法,该方法返回一个类型为Class类型的对象实例,例如:Class textFieldC = textField.getClass();
利用Class类型的对象实例,可以访问该对象的textField对象的描述信息,可以访问的主要描述信息如表所示:
组成部分 | 访问方法 | 返回值类型 | 说明 |
包路径 | getPackage() | Package对象 | 获得该类的存放路径 |
类名称 | getName() | String对象 | 获得该类的名称 |
继承类 | getSuperClass() | Class对象 | 获得该类的父类 |
实现接口 | getInterfaces() | Class型数组 | 获得该类实现的所有接口 |
构造方法 |
getConstructors() getConstructor(Class<?>...parameterTypes) getDeclaredConstructors() getDeclaredConstructor(Class<?>...parameterTypes) |
Constructor型数组 Constructor对象 Constructor型数组 Constructor对象 |
获得所有权限为public的构造方法 获得权限为public的指定构造方法 获得所有的构造方法,按声明顺序返回 获得指定构造方法 |
方法 |
getMethods() getMethod(String name, Class<?>...parameterTypes) getDeclaredMethods() getDeclaredMethod(String name, Class<?>...parameterTypes) |
Method型数组 Method对象 Method型数组 Method对象 |
获得所有权限为public的方法,包含从父类继承的方法 获得权限为public的指定方法 获得所有方法,按声明顺序返回,不包含从父类继承的方法 获得指定方法 |
成员变量 |
getFields() getField(String name) getDeclaredFields() getDeclaredField(String name) |
Field型数组 Field对象 Field型数组 Field对象 |
获得所有权限为public的成员变量,包含从父类继承的成员变量 获得权限为public的指定成员变量 获得所有成员变量,按声明顺序返回,不包含从父类继承的成员变量 获得指定成员变量 |
内部类 |
getClasses() getDeclaredClasses() |
Class型数组 Class型数组 |
获得所有权限为public的内部类、 获得所有内部类 |
内部类的声明类 | getDeclaringClass() | Class对象 | 如果该类为内部类,则返回它的成员类,否则返回null |