黑马程序员技术交流社区

标题: 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