使用反射修改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属性的更多相关文章
- 利用反射修改final数据域
当final修饰一个数据域时,意义是声明该数据域是最终的,不可修改的.常见的使用场景就是eclipse自动生成的serialVersionUID一般都是final的. 另外还可以构造线程安全(thre ...
- java中字符串“不可变性”的破坏,使用反射破坏final属性。以及涉及到字符串常量池的问题。
大家都清楚java中String类是不可变的,它的定义中包含final关键字.一旦被创建,值就不能被改变(引用是可以改变的). 但这种“不可变性”不是完全可靠的,可以通过反射机制破坏.参考一下代码: ...
- java反射修改final变量
private void updateFinalModifiers(Field field) throws NoSuchFieldException, IllegalAccessException { ...
- Java反射-修改字段值, 反射修改static final修饰的字段
反射修改字段 咱们从最简单的例子到难, 一步一步深入. 使用反射修改一个private修饰符的变量name 咱们回到主题, 先用反射来实现一个最基础的功能吧. 其中待获取的name如下: public ...
- Java反射-修改private final成员变量值,你知道多少?
大家都知道使用java反射可以在运行时动态改变对象的行为,甚至是private final的成员变量,但并不是所有情况下,都可以修改成员变量.今天就举几个小例子说明. 基本数据类型 String类型 ...
- 通过反射 修改访问和修改属性的值 Day25
package com.sxt.field; /* * 通过反射拿到属性值 * 修改public属性值 * 修改private属性值 * 缺点:可读性差:代码复杂 * 优点:灵活:可以访问修改priv ...
- JDK动态代理+反射实现动态修改注解属性值
这是最近朋友的一个需求,正好闲来无聊有些时间,跟着研究一下,如有不正确的地方,欢迎大家指正~ 一.准备自定义注解 注:如何实现自定义注解,请移步百度. 二.实现 1.实现方式1:通过反射+动态代理动态 ...
- 反射修改 static final 变量
一.测试结论 static final 修饰的基本类型和String类型不能通过反射修改; 二.测试案例 @Test public void test01() throws Exception { s ...
- Java 反射修改类的常量值、静态变量值、属性值
前言 有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值. 定义一个实体类 class ...
随机推荐
- Java匹马行天下——开篇
个人感言: 匹马行天下是我高中时候看过一部叫<九鼎记>的小说中的其中一个大章节标题,在整个这一章中,讲的是是主人公滕青山历经艰险,又心如磐石,一心修行,最后巅峰归来的故事.现在回想,依旧心 ...
- [EXP]Huawei Router HG532e - Command Execution
#!/bin/python ''' Author : Rebellion Github : @rebe11ion Twitter : @rebellion ''' import urllib2,req ...
- 第六章:声明式服务调用:Spring Cloud Feign
Spring Cloud Feign 是基于 Netflix Feign 实现的,整合了 Spring Cloud Ribbon 和 Spring Cloud Hystrix,除了提供这两者的强大功能 ...
- .net core build docker image
1.创建.net core web项目 2.添加Dockerfile文件 # 基于microsoft/dotnet:2.1-aspnetcore-runtime构建Docker Image FROM ...
- s3 api接口的调用
最近公司使用s3做文件存储服务器,因此在程序中需要调用s3的api,目前程序中使用了python和java版本的s3的api,简单做下记录,方便以后使用. 一.s3 api使用python版 1.安装 ...
- Android_Studio_Checkout_Github_Error"Cannot run program "git.exe":CreateProcess error = 2
答案都在这了,如果你有下载过git而不是github,那么你可以指定git.exe给android studio 正如这样:
- PHP-CPP开发扩展(四)
PHP-CPP是一个用于开发PHP扩展的C++库.本节讲解如何在C++中调用PHP函数. 调用PHP函数 调用普通函数 // call a function from user space Php:: ...
- Docker上运行MySQL服务
1.搜索MySQL镜像 $ docker search mysql INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.i ...
- flask 压缩json
这样返回的json会被压缩
- centos7环境开启WIFI热点
1.环境介绍 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@localhost ~]# u ...