博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
交换两个局部变量Integer的值
阅读量:5317 次
发布时间:2019-06-14

本文共 1396 字,大约阅读时间需要 4 分钟。

反射是很强大的,谁说的final修饰的就不能改变,

通过反射获取成员变量,之后可以取消访问修饰符,也就是说private的也可以访问,

在修改常量(final修饰的),之后就可以对其做任何操作了

如下,通过一个方法交换两个Integer对象的值:

package ni.jun.yang.test;import java.lang.reflect.Field;import java.lang.reflect.Modifier;public class Test {    public static void main(String[] args) {        Integer a = 10;        Integer b = 20;        System.out.println("交换前:a="+a+",b="+b);                change(a,b);                System.out.println("交换后:a="+a+",b="+b);    }    public static void change(Integer a, Integer b) {    //        System.out.println("交换后:a="+b+",b="+a);//        System.exit(0);        try {            Field field = Integer.class.getDeclaredField("value");            field.setAccessible(true); //取消访问修饰符            //public final class Field extends AccessibleObject implements Member            //值为 true 则指示反射的对象在使用时应该取消 Java语言访问检查。            //值为 false 则指示反射的对象应该实施 Java语言访问检查。                        //修改常量(final)            Field modifiersField = Field.class.getDeclaredField("modifiers");            modifiersField.setAccessible(true);            modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);            //交换            int temp = b;            field.set(b, a);            field.set(a, new Integer(temp));        } catch (Exception e) {            e.printStackTrace();        }                    }}

 

转载于:https://www.cnblogs.com/nijunyang/p/7668179.html

你可能感兴趣的文章
readonly和const的区别
查看>>
VS 代码行数统计
查看>>
SSM框架搭建(四) springmvc和mybatis的配置
查看>>
UVa 11346 - Probability
查看>>
python数据类型之间的转换
查看>>
微软职位内部推荐-SDEII
查看>>
微软职位内部推荐-SENIOR SOFTWARE ENGINEER
查看>>
Redis系统性介绍
查看>>
(备忘)打开office2010总是在配置进度
查看>>
jquery中的ajax方法(备忘)
查看>>
iOS基础-高级视图-UITableView--静态单元格
查看>>
打印图片的属性和实现另存图片功能以及使用numpy
查看>>
IOS-网络(大文件下载)
查看>>
基于MySQL的高可用可扩展架构探讨
查看>>
linux系统服务设置命令--chkconfig命令参数及用法详解
查看>>
信息安全系统设计基础第七周学习总结
查看>>
读取bmp图片数据
查看>>
java 实现快速排序
查看>>
python学习day2:类与对象
查看>>
Mathematica修改默认字体
查看>>