java 反射 私有成员_Java对类私有变量的暴力反射技术讲解

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)两个类:(在同一包下即可)

fb298728669b7c705afd3b6fc2110dd4.png

(2)ReflectPoint

cf8c0e3802de04f85c61ef7b339ea44f.png

(3)ReflectTest(下边代码写在类里即可)

aa47a822771e63ab50432f0153ec715c.png

实现了暴力反射!!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值