黑马程序员技术交流社区
标题:
finally的使用问题
[打印本页]
作者:
吴刚
时间:
2013-5-29 00:46
标题:
finally的使用问题
class A {
final int a = 9;
new A();
}
请问final说修饰的变量到底存在内存的那个地方?网上说有的和A对象一起存在堆中,因为final修饰的i是成员变量,有的说是存在于本地方法区的常量池,还有的人说9存在常量池,然后i存在堆中,并且堆中存放的是9的地址指针,╮(╯▽╰)╭!!!!!!!!!!!!!!!!
作者:
FantasticPie
时间:
2013-5-29 00:51
就在这段代码里,我比较赞成final修饰的i是成员变量和A对象一起存在堆中。觉得深究这种问题没有太大的必要
作者:
王瀛
时间:
2013-5-29 09:01
不清楚,只知道毕老师说过一般 public static final (数据类型) (变量名) = 数值
三个一起出现就是全局常量
作者:
翟宝海
时间:
2013-5-29 10:20
在jvm规范中,类的静态变量存储在方法区,实例变量存储在堆区,也就是说static关键字才对变量的存储区域造成影响;final关键字对于变量的存储区域是没有任何影响的,用final关键字来修饰变量表明该变量一旦赋值就无法更改,并且编译器必须保证该变量在使用前被初始化赋值。
class A {
final int a = 9;
new A();
}
这段代码里,a和9就去分开的:a是这个类的一个实例变量,类会在实例化的时候将这个变量存储在堆区,无论是否有final关键字,它都是在堆区;
而9,是一个字面量,它会存放在常量池,无论你是否加上final关键字,5都会在常量池;
这段代码你可以理解为:从常量池中取出9赋给a。
作者:
廖志强
时间:
2013-5-29 10:34
final关键字(掌握)
(1)final是最终的意思,可以用于修饰类,修饰方法,修饰变量
(2)特点:
它修饰的类不能被继承
它修饰的方法不能被重写
它修饰的变量是常量
既然是常量,就是在常量池,a是存在栈内存中,9是在常量池中,a 拿的事9在常量池中的地址值指向9.
作者:
殇_心。
时间:
2013-5-29 16:48
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2