java 反射 修改静态变量_Java 反射修改类的常量值、静态变量值、属性值

本文介绍了如何使用Java反射修改类的静态变量和常量值,包括私有静态常量和公共静态变量。在修改Integer类型的静态常量时,反射操作成功,但针对int等基本类型,由于JVM的编译优化,可能导致反射修改后的值无法直接体现在代码输出中。详细解释了这种现象的原因和背后的JVM优化机制。
摘要由CSDN通过智能技术生成

前言

有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值。

定义一个实体类

class Bean{

private static final Integer INT_VALUE = 100;

}

利用反射修改私有静态常量方法

System.out.println(Bean.INT_VALUE);

Field field = Bean.class.getField("INT_VALUE");

//将字段的访问权限设为true:即去除private修饰符的影响

field.setAccessible(true);

//去除final修饰符的影响,将字段设为可修改的

Field modifiersField = Field.class.getDeclaredField("modifiers");

modifiersField.setAccessible(true);

modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

//把字段值设为200

field.set(null, 200);

System.out.println(Bean.INT_VALUE);

修改私有静态常量测试结果

100

200

看到测试结果说明我们的反射修改成功了。

利用反射修改共有静态变量方法

class Bean{

p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值