1、对象名.getClass():返回的是某个引用指向的具体对象所属的运行是类,的字节码对象。获取到的是那个真正用来创建对象的子类的字节码对象。
2、类名.class:如果已经有了类名,可以通过.class的方式获取这个类的字节码对象。通过 Class.forName(String className): String className 全限定名: 包名+类名
public Constructor>[] getConstructors()能获取所有的被 public修饰的
获取所有的构造方法:public Constructor>[] getDeclaredConstructors():
只能获取单个被public 修饰的构造:public ConstructorgetConstructor(Class>...parameterTypes) public Constructor getDeclaredConstructor(Class>... parameterTypes)可以获取所有的构造方法, 但是一般不会获取被public修饰的构造方法
public Field[] getFields() 获取所有public 修饰的变量
public Field[] getDeclaredFields() 获取所有的 变量 (包含private修饰的)
可以单个获取 public Field getField(String name) 获取指定的 public修饰的变量
public Field getDeclaredField(String name) 获取指定的任意变量(包含私有)
给我们的成员变量 name 进行赋值 public void set(Object obj, Object value) Object obj 是要给哪一个对象进行赋值 , Object value 具体要赋的值 一个类中 有 被public空参构造,我们想要创建对象, 就可以不用通过反射获取构造,创建对象 可以直接通过 Class类中的 newInstance()
public Field getDeclaredField(String name) 获取指定的任意变量(包含私有)
public Method[] getMethods():获取本类和继承过来的所有的public方法
public Method[] getDeclaredMethods():获取本类中所有的方法(包括private,不包括继承的,和访问权限无关)
public Method getMethod(String methodName, Class>... parameterTypes):获取指定public的方法(包括继承的) String methodName 方法的名字 Class>... parameterTypes 方法数据类型.class
public Method getDeclaredMethod(String name,Class>... parameterTypes):获取指定方法(包括private,不包括继承的)
public Method getMethod(String methodName, Class>... parameterTypes):获取指定public的方法(包括继承的)
String methodName 方法的名字
Class>... parameterTypes 方法数据类型.class
执行 通过 反射获取到的成员方法 public Object invoke(Object obj,Object... args) Object obj 要执行哪个对象的成员方法 Object... args, 要执行的方法的要传入的具体值
暴力反射, 通过暴力反射,我们可以执行 类中私有的成员变量,构造方法,成员方法 获取私有的成员变量, 成员方法 构造
setAccessible(boolean boo) 决定 能否执行 私有的构造方法 boolean boo 默认是 false 意味着 执行权限检查 boo 手动改为 true 意味着取消权限检查