Java对类私有变量的暴力反射技术讲解

 更新时间:2019年03月30日 15:55:32   作者:徐刘根  
今天小编就为大家分享一篇关于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)两个类:(在同一包下即可)

(2)ReflectPoint

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

实现了暴力反射!!

总结

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

相关文章

  • spring batch 读取多个文件数据导入数据库示例

    spring batch 读取多个文件数据导入数据库示例

    本篇文章主要介绍了spring batch 读取多个文件数据导入数据库示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Java response响应体和文件下载实现原理

    Java response响应体和文件下载实现原理

    这篇文章主要介绍了Java response响应体和文件下载实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java线程安全问题小结_动力节点Java学院整理

    Java线程安全问题小结_动力节点Java学院整理

    这篇文章主要介绍了Java线程安全问题小结的相关资料,需要的朋友可以参考下
    2017-05-05
  • IO密集型任务设置线程池线程数实现方式

    IO密集型任务设置线程池线程数实现方式

    这篇文章主要介绍了IO密集型任务设置线程池线程数实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • java设计模式学习之工厂方法模式

    java设计模式学习之工厂方法模式

    这篇文章主要介绍了java设计模式学习之工厂方法模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • idea如何自动添加版权许可证信息

    idea如何自动添加版权许可证信息

    这篇文章主要介绍了idea如何自动添加版权许可证信息问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 解决idea npm:无法将“npm”项识别为cmdlet、函数、脚本文件或可运行程序的名称问题

    解决idea npm:无法将“npm”项识别为cmdlet、函数、脚本文件或可运行程序的名称问题

    在IDEA中运行npm命令时出现无法识别的错误,通常是由于npm环境变量配置不正确引起,解决方法包括以管理员身份运行IDEA,确认node和npm是否正确安装及配置环境变量,需要在系统环境变量中添加node.js的安装路径,并设置npm的全局模块和缓存路径
    2024-10-10
  • java类和对象原理与用法分析

    java类和对象原理与用法分析

    这篇文章主要介绍了java类和对象原理与用法,结合实例形式分析了java类和对象的相关概念、功能、原理、使用技巧与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • Java获取当前时间年月日的方法

    Java获取当前时间年月日的方法

    这篇文章主要为大家详细介绍了Java获取当前时间年月日的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • TKMybatis的介绍和使用详解

    TKMybatis的介绍和使用详解

    TKMybatis 是基于 Mybatis 框架开发的一个工具,本文主要介绍了TKMybatis的介绍和使用详解,内部实现了对单表的基本数据操作,只需要简单继承 TKMybatis 提供的接口,就能够实现无需编写任何 sql 即能完成单表操作,感兴趣的可以了解一下
    2021-12-12

最新评论