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对类私有变量的暴力反射技术讲解相关推荐

  1. java子类访问父类私有成员_Java中子类可以继承父类的私有成员,但是不能(直接)访问!!!...

    今天学习Java三大特征之一:继承的时候,产生了一些疑问,最后通过网上查找和各位网友的帮助,终于拔开云雾见日出.下面进入正题: 首先:子类对象拥有父类中的所有属性和方法:在这里,很多人会问构造器可以继 ...

  2. java 反射 获取成员_java 反射获取成员

    package com.wxjaa; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java ...

  3. java scanner类成员_Java Scanner类的使用示例

    1 Scanner的使用 JDK给我们提供了成千上万个类供我们直接使用,而Scanner就是这众多类里的一个最常用的一个类,既然它是一个类,我们使用它的方法和使用我们自己写的类的方法基本一致. 方法基 ...

  4. java什么是反射 代码说明_java编程中,常提到的反射代码指的是什么?

    展开全部 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态e5a48de588b662616964757a686964616f31333335326232或行 ...

  5. java修饰符默认_Java的类,方法,变量等等的默认修饰符是什么

    访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权限. 默认的,也称为default,在同一包内可见,不使用任何修饰符. 私有的,以pr ...

  6. java biginteger 取模_Java BigInteger类

    其实除了Python,Ruby外,Java也自带高精,只不过被封装在类里.Java有两个高精类:BigInteger和BigDecimal,分别是高精度整数和高精度小数.本文来简单介绍一下BigInt ...

  7. java date格式化输出_Java Date类以及日期的格式化输出

    Java中的Date类用于表示日期时间,在java.util包中.虽然Date类在设计之初没有考虑到国际化,很多方法都已经被定义为过时,但是Date却是程序设计过程中经常用到的一个类.本文将说说Dat ...

  8. Java入参关键字_Java基础17-成员变量、return关键字和多参方法

    1.成员变量 在类中声明的变量为成员变量 //Dog类 class Dog{ String name;//成员变量 } public class Test1{ public static void m ...

  9. java如何配置环境_java如何配置环境变量

    展开全部 首先下载好jdk,直接双击就可以安装,安装比较简单,基本都是点62616964757a686964616fe78988e69d8331333365653832击"下一步" ...

最新文章

  1. 【导出Excel】Vue实现导出下载Excel文件(blob文件流)--亲测可用
  2. Uber最新开源Manifold,助力机器学习开发者的可视化与调试需求
  3. 虚拟机中安装MAC OS X教程(适用所有电脑方法,特别是cpu不支持硬件虚拟化的电脑)...
  4. Spring注解配置工作原理源码解析
  5. Matlab定义符号函数(ZZ)
  6. ExtJS学习之window
  7. 大学生职业生涯规划包word,ppt模板以及必备素材
  8. mysql-front服务器_mysql-front远程连接自己linux服务器上的mysql服务器
  9. Spring Boot为什么不需要额外安装Tomcat?
  10. 算法 图8 How Long Does It Take
  11. 从优化角度推导主成分分析法(PCA)的数学原理
  12. 帮助 help 命令
  13. 模式识别-从贝叶斯决策理论看模式分类
  14. 为什么找不到AppData、Default、ProgramData文件
  15. poi和easyExcel基于Java操作Excel学习笔记
  16. 改成每天晚上锻炼身体
  17. java输入长和宽输出面积_用Java实现计算矩形的面积与周长
  18. 宝塔面板SSL证书显示不安全?这里我教你宝塔SSL证书如何配置及开启HTTPS访问的操作方法
  19. python如何启动excel_如何用python打开excel
  20. 【Matlab限速标志识别】形态学限速标志识别【含GUI源码 1142期】

热门文章

  1. java参数传入泛型类型_Java 泛型(参数化类型)
  2. python文本解析_Python之文本文件解析
  3. 字节月薪6万招 kubernetes 开发,看到要求我傻眼了……
  4. 如何将 Pycharm 打造得更称手
  5. oracle无法重建em,ORACLE 11g, EM 无法启动的问题和重建
  6. bootstrap mysql分页_bootstrap分页
  7. 框架中的左侧菜单关联右侧页面是如何实现的_前端基础学习:Vue2.0实现移动端外卖平台项目,参考旧版饿了么!...
  8. 机器学习基础-集成学习-13
  9. Python学习:numpy的使用技巧和注意
  10. [Linux] 编写Dockerfile文件自动构建镜像