在java运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法 ;对应任何一个对象,都能调用它的任意方法和属性。这种动态获取信息以及动态调用对象方法的功能成为java反射机制。
1.获取类
加载类,获取类字节码:class对象
- Class c1=类名.Class
- 调用Class提供的方法 public static Class forName(String package); Class.forName("com...");
- Object提供的方法:public Class getClass();
2.获取类构造器
constructor对象
Constructor<?>[] getConstructors() 获取全部构造器(public修饰)
Constructor<?>[] getDeclaredConstructors() 获取全部构造器(所有)
Constructor<T>[] getConstructor(Class<?>...paramterTypes) 获取某个构造器(public修饰)
Constructor<T>[] getDeclaredConstructor(Class<?>...paramterTypes) 获取某个构造器(public修饰)
T newInsTance(Object...initages) 构造函数赋值初始化
public viod setAccessible(boolean flag) true,禁止检查访问控制
3.获取类成员变量
Field对象
public Field[] getFields() 获取类的全部成员变量(public)
public Field[] getDeclaredFields()
public Field getField(String name) 获取类的某个成员变量(public)
public Field getDeclaredField(String name)
4.获取类成员方法
Method对象
Method[] getMethods() 获取全部成员方法(public)
Method[] getDeclaredMethods()
Method getMethod(String name,Class<?>...parameterTypes) 获取某个成员方法(public)
Method getDeclaredMethod(String name,Class<?>...parameterTypes)
public Object invoke(Object obj,Object...args) 触发对象方法执行
public viod setAccessible(boolean flag) true,禁止检查访问控制