您的位置:首页 > 编程语言 > Java开发

java类中成员变量初始化后存放在堆内存中还是栈内存中?

2014-12-03 09:52 246 查看
答案是堆内存。

之前明明看过java类初始化过程的,
但一下子看到这样的题目,还是懵了。
百度后,那些帖子的回复各有各说,
脑袋都看得要塞住了,还是看书求证吧。

李刚的《疯狂Java》第128页开始,有一个类从初始化开始,
在内存发生什么变化的详细过程,这里简单记录一下。
class Person{
String name;
static int eyeNum;
}


上面这个Person类,有成员变量name和静态成员变量eyeNum了,
当执行下面语句:
Person p1 = new Person();
Person p2 = new Person();
p1.name = "A";
p2.name = "B"
p1.eyeNum = 2;
p2.eyeNum = 3;


Person p1 = new Person();第一次使用Person类,系统在堆内存为Person类分配空间,其中也包括了静态成员变量eyeNum(初始值为0)。

然后,在堆内存new一个Person对象,其中name为null,然后将p1指向这个对象。

接着new p2时,因为类已经初始化了,只需重复第2步就行了。

p1.name = "A"; 让堆内存中p1对象的name指向一个"A"字符串。

p1.eyeNem = 2;此时通过Person对象修改Person的类属性(因为是静态成员变量),Person类的eyeNum属性被赋值为2。

Person类
eyeNum →2
p1
------
---------------------
第二个Person对象
第一个Person对象
p2
------
name →
"B"name →
"A"
栈内存



画的很难看,不过大概就是上面这样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 百度 null
相关文章推荐