暴力反射就是绕过编译器,来操作该类中的private私有字段,普通反射是无法直接获取私有字段的
举一个Field 类反射的例子
普通反射
示例: Field field = obj.getClass().getField("变量名")
field.get(obj) //通过反射获取对象的变量值
步骤: 1)获取class字节码 2)获取指定的Field对象 3)获取变量值
"暴力反射"
get方法只能获取声明为 public 的变量,对于私有变量,可以通过getDeclaredField()方法获取 private 变量
获取对象后要通过 setAccessible(true)方法将该域设置为可访问
示例: Field field = obj.getClass().getDeclaredField(); //1)2)获取私有file对象
field.setAccessible(true); //3)将private变量设置为可访问;继承自父类 AccessibleObject 的方法
field.get(obj); //4)获取变量值 |