论坛首页 编程语言技术论坛

利用反射获取与修改private的属性的值

浏览 9646 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-11-19   最后修改:2012-11-19
if(i!=我){} 写道
freish 写道
if(i!=我){} 写道
freish 写道
ifox 写道
freish 写道
修改final类型的值才有意思

那就失去final存在的意义了。
撸主例子不错阿。我在Java编程思想上看来,不过那例子木有撸主的好。支持。。。

private本来就是不给外部直接访问的,这样搞不也失去private的意义了


这一般用于debug吧,不过总归是破坏封装的。

但是final修饰的变量就不通了,final变量放在栈中,跟普通变量根本无法互相转换。



恕我直言,这句话反映出你还没搞清楚堆、栈、java堆、java栈的区别以及用途


那烦请您老人家指点一二?


无意找茬,不过基本可以肯定你木有看过《深入java虚拟机》或《java虚拟机规范》
《深入java虚拟机》第二版中文版p92:5.3.4方法区、p97:5.3.5堆、p102:5.3.7java栈
《java虚拟机规范 javase 7 版》周志明等翻译版:p28:2.5.2java虚拟机栈、p29:2.5.3java堆、p29:2.5.4方法区、p30:2.5.5运行时常量池、p31:2.6栈帧
0 请登录后投票
   发表时间:2012-11-19   最后修改:2012-11-19
freish 写道
if(i!=我){} 写道
freish 写道
if(i!=我){} 写道
freish 写道
ifox 写道
freish 写道
修改final类型的值才有意思

那就失去final存在的意义了。
撸主例子不错阿。我在Java编程思想上看来,不过那例子木有撸主的好。支持。。。

private本来就是不给外部直接访问的,这样搞不也失去private的意义了


这一般用于debug吧,不过总归是破坏封装的。

但是final修饰的变量就不通了,final变量放在栈中,跟普通变量根本无法互相转换。



恕我直言,这句话反映出你还没搞清楚堆、栈、java堆、java栈的区别以及用途


那烦请您老人家指点一二?


无意找茬,不过基本可以肯定你木有看过《深入java虚拟机》或《java虚拟机规范》
《深入java虚拟机》第二版中文版p92:5.3.4方法区、p97:5.3.5堆、p102:5.3.7java栈
《java虚拟机规范 javase 7 版》周志明等翻译版:p28:2.5.2java虚拟机栈、p29:2.5.3java堆、p29:2.5.4方法区、p30:2.5.5运行时常量池、p31:2.6栈帧

好吧,那你的结论呢?

可不可以这样理解:我猜测的情况和“规范”中描述的有很多“相似点”?

或者,你可以明确的告诉我final修饰的变量,在各种情况下的创建、储存、读取方式~
0 请登录后投票
   发表时间:2012-11-19   最后修改:2012-11-19
if(i!=我){} 写道
freish 写道
if(i!=我){} 写道
freish 写道
if(i!=我){} 写道
freish 写道
ifox 写道
freish 写道
修改final类型的值才有意思

那就失去final存在的意义了。
撸主例子不错阿。我在Java编程思想上看来,不过那例子木有撸主的好。支持。。。

private本来就是不给外部直接访问的,这样搞不也失去private的意义了


这一般用于debug吧,不过总归是破坏封装的。

但是final修饰的变量就不通了,final变量放在栈中,跟普通变量根本无法互相转换。



恕我直言,这句话反映出你还没搞清楚堆、栈、java堆、java栈的区别以及用途


那烦请您老人家指点一二?


无意找茬,不过基本可以肯定你木有看过《深入java虚拟机》或《java虚拟机规范》
《深入java虚拟机》第二版中文版p92:5.3.4方法区、p97:5.3.5堆、p102:5.3.7java栈
《java虚拟机规范 javase 7 版》周志明等翻译版:p28:2.5.2java虚拟机栈、p29:2.5.3java堆、p29:2.5.4方法区、p30:2.5.5运行时常量池、p31:2.6栈帧

好吧,那你的结论呢?

可不可以这样理解:我猜测的情况和“规范”中描述的有很多“相似点”?

或者,你可以明确的告诉我final修饰的变量,在各种情况下的创建、储存、读取方式~



分两种:
1、编译时常量:方法区类元数据存储一份;使用该常量的类的字节码流中或使用该常量的类的常量池中有一份拷贝
2、非编译时常量:方法区类元数据中,使用该常量的类在它的常量池中会有一个符号引用

java栈的概念:
java栈中存储的是帧,每个java线程都有自己的一个java栈,当调用一个java方法时,新建一个帧入栈,退出一个方法时,弹出一个帧并废弃
帧的内容包括三部分:局部变量区(大小在编译时确定),操作数栈(大小在编译时确定)、帧数据区(大小特定于实现)
局部变量区:用来存储方法调用的局部变量(包括参数、方法内部定义的变量)
操作数栈:大部分操作码从操作数栈中获取数据,比如将局部变量区的数据入操作数栈、从栈顶弹出两个元素进行运算,将栈顶元素弹出存回局部变量区等
帧数据区:用于存储异常处理相关的一些信息

可见final值的存储与java栈没什么关系
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics