Java中的反射机制,使得我们可以在运行期获取Java类的字节码文件中的构造函数,成员变量,成员函数等信息。
1. 获取Class对象的三种方式:
- Class.forName(“类名字符串”)(注意:类名字符串必须是全称,包名+类名)
Class baseInfo = Class.forName("top.sguotao.ReflectionJava");
- 类名.class
Class object = Object.class;
- 实例对象.getClass()
Class date = (new Date()).getClass();
Class testclass = this.getClass();
2. 获取类的构造函数Constructor:
- 获取参数列表是parameterTypes,访问控制符是public的构造函数
public Constructor getConstructor(Class[] parameterTypes)
- 获取所有访问控制符是public的构造函数
public Constructor[] getConstructors()
- 获取参数列表是parameterTypes,并且是类自身声明的构造函数,访问控制符包含public、protected和private的函数。
public Constructor getDeclaredConstructor(Class[] parameterTypes)
- 获取类自身声明的全部的构造函数,访问控制符包含public、protected和private的函数。
public Constructor[] getDeclaredConstructors()
- 如果类声明在其它类的构造函数中,返回该类所在的构造函数,如果存在则返回,不存在返回null
public Constructor getEnclosingConstructor()
3. 获取类的成员变量
- 获取“名称是name”的public的成员变量(包括从基类继承的、从接口实现的所有public成员变量)
public Field getField(String name)
- 获取全部的public成员变量(包括从基类继承的、从接口实现的所有public成员变量)
public Field[] getFields()
- 获取“名称是name”,并且是类自身声明的成员变量,包含public、protected和private成员变量。
public Field getDeclaredField(String name)
- 获取全部的类自身声明的成员变量,包含public、protected和private成员变量。
public Field[] getDeclaredFields()
4. 获取类的成员函数
- 获取函数名是name,参数是parameterTypes的public的函数(包括从基类继承的、从接口实现的所有public函数)
public Method getMethod(String name, Class[] parameterTypes)
- 获取全部的public的函数(包括从基类继承的、从接口实现的所有public函数)
public Method[] getMethods()
- 获取函数名name,参数是parameterTypes,并且是类自身声明的函数,包含public、protected和private方法。
public Method getDeclaredMethod(String name, Class[] parameterTypes)
- 获取全部的类自身声明的函数,包含public、protected和private方法。
public Method[] getDeclaredMethods()
- 如果这个类是其它类中某个方法的内部类,调用getEnclosingMethod()就是这个类所在的方法;若不存在,返回null。
public Method getEnclosingMethod()