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

答案是堆内存。

之前明明看过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"

栈内存堆内存

画的很难看,不过大概就是上面这样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值