A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许冉 黑马帝   /  2011-10-5 22:11  /  2200 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看完视频是这样的
创建了一个类的实例对象,就会在堆内存中创建一个对象,一般属性存在堆中,静态成员存在方法区
可是看了论坛中的一些回复,怎么觉的有些属性是分配到了栈中,是我理解错了吗
final成员放哪了?
静态方法只能访问静态成员,那么final方法访问有什么限制吗?

评分

参与人数 1技术分 +1 收起 理由
admin + 1 看看大家的回答!

查看全部评分

3 个回复

正序浏览
黑马网友  发表于 2011-10-5 22:53:53
板凳
final成员放到heap中了,对象的地址存放在栈内存中。
回复 使用道具 举报
黑马网友  发表于 2011-10-5 22:52:13
藤椅
栈内存
    Java栈内存由局部变量区、操作数栈、帧数据区组成,以帧的形式存放本地方法的调用状态(包括方法调用的参数、局部变量、中间结果……)。
  堆内存
    堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
  本地方法栈内存
final修饰符
  在Java声明类、属性和方法时,可以使用关键字final来修饰,final所标记的成分具有终态的特征,表示最终的意思。
  final的具体规则
    ·final标记的类不能被继承
    ·final标记的方法不能被子类重写
    ·final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次
    ·final标记的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用
    ·final标记的局部变量可以只声明不赋值,然后再进行一次性的赋值
    ·final一般用于标记那些通用性的功能、实现方式或取值不能随意被改变的成分,以避免被误用
  如果将引用类型(即,任何类的类型)的变量标记为final,那么,该变量不能指向任何其它对象,但可以改变对象的内容,因为只有引用本身是final的。
回复 使用道具 举报
黑马网友  发表于 2011-10-5 22:46:26
沙发
final只是一个修饰符。对象的地址存放在栈内存中。下面是小弟的一点小结,献丑了。

     局部变量:1:定义在方法的参数,方法内的变量,语句中的变量。

         2:局部变量都存储在栈内存中。

         3:只要所在的函数被执行,该函数的变量才存在于栈内存中,当该变量所属区域执行结束,该变量消失。

         4:局部变量的范围是有限的,即在该区域所在的大括号中。

         5:  局部变量如果没有被复制的话,Java是不会承认其默认值的!

    成员变量 :  1:定义在类中的变量。

           2:成员变量都存储与堆内存的对象中。

           3:成员变量需要被对象调用,当对象被垃圾站回收时,对象中的变量才会消失。

           4:成员变量在整个类中有效。如果别的类的方法要访问它,必须创建该类的对象,然后才可以通过点运算符来引用。

           5:成员变量没被赋值时,Java是会承认其默认值的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马