当前位置: 首页 > 编程笔记 >

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

那正初
2023-03-14
本文向大家介绍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)两个类:(在同一包下即可)

(2)ReflectPoint

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

实现了暴力反射!!

总结

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

 类似资料:
  • 问题内容: 我正在尝试编写一种使用反射将在类中获取私有字段的方法。 这是我的课程(此示例已简化): 所以说我这样做: 我得到一个因为是私人的。有没有一种方法可以使用反射来获取/设置私有变量?(我已经在C#中完成了,但这是我第一次在Java中尝试过它)。如果您想知道为什么需要这样做:),这是因为有时在单元测试期间,将私有变量设置为虚假值以进行故障测试等很方便。 问题答案: 弄清楚了。需要

  • 问题内容: 我有一个有一堆常量字符串的类。 我需要通过反射加载此类并检索这些常量。我可以起床: 但是我对如何检索此类中的字段感到困惑。 问题答案: 访问字段的快速样本-

  • :我知道如何: 运行不带参数的私有void方法 :我知道如何: 设置任意类型的私有字段 设置任意类型的私有静态字段 设置任意类型的私有最终字段 设置任意类型的私有静态最终字段 :我知道如何: 获取任何类型的私有字段 :我知道如何: (可用于以单模式创建私有构造函数的新实例,同时保持实例Field为空) 创建不带参数的私有构造函数的新实例 我不知道的,我想知道的: 获取任何类型的私有静态字段,并将其

  • 本文向大家介绍Java反射机制的讲解,包括了Java反射机制的讲解的使用技巧和注意事项,需要的朋友参考一下 Java中的反射提供了一种运行期获取对象元信息的手段。即正常方法是通过一个类创建对象,反射方法就是通过一个对象找到一个类的信息。 Java的反射机制的实现要借助于4个类:class,Constructor,Field,Method; 其中class代表的时类对 象,Constructor-类

  • 问题内容: 是否可以使用Java反射从另一个类实例化私有内部类。例如,如果我采用了这段代码 是否可以实例化并从main类中的main方法获得对Test的访问。 问题答案: 使用反射时,您会发现该内部类的构造函数将外部类的实例作为附加参数(总是第一个)。 例:

  • 是否可以从类main中的main方法实例化并获得对Test的访问。