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(下边代码写在类里即可)

实现了暴力反射!!

总结

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

相关文章

  • Java线程通信详解

    Java线程通信详解

    本篇文章主要介绍了Java线程通信问题,线程通信用来保证线程协调运行,有需要的朋友可以了解一下。
    2016-10-10
  • 举例说明Java中代码块的执行顺序

    举例说明Java中代码块的执行顺序

    这篇文章主要介绍了举例说明Java中代码块的执行顺序,包括静态属性和非静态属性以及构造函数等相关的执行先后,需要的朋友可以参考下
    2015-07-07
  • Java三种IO模型原理实例详解

    Java三种IO模型原理实例详解

    这篇文章主要介绍了Java三种IO模型原理实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • web 容器的设计如何实现

    web 容器的设计如何实现

    这篇文章主要介绍了web 容器的设计如何实现的相关资料,本文旨在介绍如何设计一个web容器,只探讨实现的思路,并不涉及过多的具体实现。把它分解划分成若干模块和组件,每个组件模块负责不同的功能,需要的朋友可以参考下
    2016-12-12
  • Java线程优先级示例代码

    Java线程优先级示例代码

    使用过Bit下载软件的同学应该很清楚,我们有多个下载任务同时执行,而其中的某一个或多个是非常重要的,于是给这些任务设定一个高度优先,以便任务可以获取更多的带宽尽早完成下载
    2013-09-09
  • IntelliJ IDEA2019实现Web项目创建示例

    IntelliJ IDEA2019实现Web项目创建示例

    这篇文章主要介绍了IntelliJ IDEA2019实现Web项目创建示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Swing常用组件之文本框和文本区

    Swing常用组件之文本框和文本区

    这篇文章主要为大家详细介绍了Swing常用组件之文本框(JTestField)和文本区(JTextArea),Swing是一个用于开发Java应用程序用户界面的开发工具包,本文开始带大家学习Swing
    2016-05-05
  • spring boot使用thymeleaf跳转页面实例代码

    spring boot使用thymeleaf跳转页面实例代码

    本篇文章主要介绍了spring boot使用thymeleaf跳转页面,实例介绍了thymeleaf的原理和介绍,有兴趣的可以了解一下。
    2017-04-04
  • SpringBoot Admin用法实例讲解

    SpringBoot Admin用法实例讲解

    在本篇文章里小编给大家整理的是一篇关于SpringBoot Admin用法实例内容,有需要的朋友们可以参考学习下。
    2019-10-10
  • Spring Boot项目添加外部Jar包以及配置多数据源的完整步骤

    Spring Boot项目添加外部Jar包以及配置多数据源的完整步骤

    这篇文章主要给大家介绍了关于Spring Boot项目添加外部Jar包以及配置多数据源的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06

最新评论