使用反射修改final属性
情型1:static final属性,无法修改其值。
package m5.d7; import java.lang.reflect.Field; public class FieldTest { public static void main(String[] args) { try { A a = new A(); Field field = a.getClass().getDeclaredField("a"); field.setAccessible(true); field.set(a, 2); System.out.println(field.get(a)); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }
} class A { private static final int a = 1;
}
运行
java.lang.IllegalAccessException: Can not set static final int field m5.d7.A.a to java.lang.Integer at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(Unknown Source) at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(Unknown Source) at sun.reflect.UnsafeQualifiedStaticIntegerFieldAccessorImpl.set(Unknown Source) at java.lang.reflect.Field.set(Unknown Source) at m5.d7.FieldTest.main(FieldTest.java:16)
情型2:final属性,可以修改其值。
package m5.d7; import java.lang.reflect.Field; public class FieldTest { public static void main(String[] args) { try { A a = new A(); Field field = a.getClass().getDeclaredField("a"); field.setAccessible(true); field.set(a, 2); System.out.println(field.get(a)); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } }
} class A { private final int a = 1;
}
运行
2
使用反射修改final属性相关推荐
- java反射设置属性值_Java反射如何有效的修改final属性值详解
前言 以前写过一篇 Java 反射修改 final 属性值,本文将在这里重新温习一下Java反射如何有效的修改final属性值,下面话不多说了,来一起看看详细的介绍: 假设有个类 class Pers ...
- fianl属性 java_Java反射如何有效的修改final属性值详解
前言 以前写过一篇 Java 反射修改 final 属性值,本文将在这里重新温习一下Java反射如何有效的修改final属性值,下面话不多说了,来一起看看详细的介绍: 假设有个类 class Pers ...
- java 反射修改final变量_Java中final的属性值怎么利用反射机制进行修改
Java中final的属性值怎么利用反射机制进行修改 发布时间:2020-12-02 17:31:07 来源:亿速云 阅读:96 作者:Leah 今天就跟大家聊聊有关Java中final的属性值怎么利 ...
- 利用反射修改final数据域
当final修饰一个数据域时,意义是声明该数据域是最终的,不可修改的.常见的使用场景就是eclipse自动生成的serialVersionUID一般都是final的. 另外还可以构造线程安全(thre ...
- Java 反射修改类的常量值、静态变量值、属性值
前言 有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值. 定义一个实体类 class ...
- java 反射 static final_Java_反射_修改final static问题
利用java的反射,在运行时将需要修改的常量强制更改成我们所需要的值 --这样就不用修改jxl库了,只要在我们项目中加几句就OK了,出问题的概率也会小很多. 于是就研究了一下,虽然最后还是发现在这个方 ...
- java反射 修改静态方法的值 setAccessible
转载自 java反射 修改静态方法的值 setAccessible 这几天闲来无事.在网上看了一个题目,相信大家都知道这个题目 static void change(String str){str=& ...
- 修改value_Java 反射修改String引发的思考?
今天看到一篇文章,问题是<String 真的是不可变的吗?>,题主最后通过反射机制修改了String 内部的char[] 对象的值,最终完成了String 的修改. 这里先上原博主的示例: ...
- JAVA反射修改常量,以及其局限
转载自 JAVA反射修改常量,以及其局限 问题,以及一个解决方案 今天公司的JAVA项目碰到一个问题:在生成xls文件的时候,如果数据较多,会出现ArrayIndexOutOfBoundsExcept ...
最新文章
- Apache与Tomcat联系及区别(转)
- kenrel volatile关键字
- unit2--unit4单元文档
- java 利用ManagementFactory获取jvm,os的一些信息--转
- java中拼写xml
- Myeclipse中weblogic配置
- linux grpc,grpc linux下的编译使用-Go语言中文社区
- 关于VUE项目地图开发中大量点标记绘制一些总结
- k3 cloud 文件服务器搭建,k3cloud服务器推荐配置
- bcscale php,【PHP开发】bcscale timezone charset的设定说明
- Emmet插件比较实用常用的写法
- 网络多人游戏架构pdf_21秒看尽ImageNet屠榜模型,60+模型架构同台献艺
- 用户行为分析面面观之二
- 多个JVM之间,能否共用同样的类?
- Endnote--在参考文献列表中添加DOI
- 用C语言打印一个菱形图案!
- 牛客竞赛C/C++语言基础22198 选村长
- 基于Python+Django+MySQL的大学生信用评估系统
- Java基础强化训练——开发工具及输出语句训练
- windows编程之画笔