时间:2021-05-20
Java对类私有变量的暴力反射
假设有一个类,他有一个私有变量:
package com.howlaa.day04;public class ReflectPoint { private int priVar; public ReflectPoint(int priVar){ this.priVar =priVar; } }如果我们直接采用.get的方式,是不可能看到私有变量的。
我们可以这样:
package com.howlaa.day04;import java.lang.reflect.Field;public class ReflectTest { public static void main(String[] args) throws Exception { ReflectPoint pt1 = new ReflectPoint(3); Field fieldx = pt1.getClass().getDeclaredField("priVar"); fieldx.setAccessible(true); fieldx.set(pt1, 100); System.out.println(fieldx.get(pt1)); }}输出:100;
那么这个Filed是什么呢?他 是一个类,表示属性的类。通过pt1得出ReflectPoint的字节码。然后再调用getDeclaredField方法,可以获取x属性。再通过setAccessible使得可以访问这个属性。然后可以通过set方法赋值。注意:getClass获得是ReflectPoint的字节码,与具体实例无关,因此,Field也与具体实例无关。在设置和访问的时候,均需要指定具体哪个实例。
Java对于私有变量的“暴力反射”技术
(1)两个类:(在同一包下即可)
(2)ReflectPoint
(3)ReflectTest(下边代码写在类里即可)
实现了暴力反射!!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
阅读目录Java反射API通过反射创建实例对象通过反射调用私有方法关于javap工具参考资料Java反射APIJava反射指的是在运行状态时,能够获取类的属性和
试想一下,如果你可以轻易地调用一个类的私有方法,那么是不是说你的封装都失效了?最近在看java的反射机制,发现居然可以利用java的反射机制去调用其他类的私有方
反射我们先创建一个Student类出来。注意类中的成员变量、构造方法、成员方法公共还是私有packagecom.reflect;publicclassStude
很多主流框架都使用了反射技术.像ssh框架都采用两种技术xml做配置文件+反射技术.与反射有关的类包.java.lang.reflect.*;和java.lan
本文接上文“老生常谈反射之Class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"1、获取