对象内存图(单个对象)

学完对象内存图,理解创建对象和使用对象在内存中的执行流程

1.单个对象

程序执行是从main()方法开始的。
1. 首先,main()方法被加载到栈内存。
2. 创建对象。Student s = new Student();左边会在main()方法中出现;右边里有两个成员变量和两个成员方法(图2)。new的动作会在堆内存里开辟空间,成员变量放置如(图3)成员变量都具有默认值,同数组默认值规则。地址值001出现,把001赋值给 s ,s通过001指向堆内存学生对象(图4)。这样创建对象才算完成。接着输出 s 的值,s 的值就是001这个地址值,在控制台输出地址值001(图5)

图2
图3
图4
图5

3.使用成员变量。s.name (图6)
s:指向栈内存 main方法里的 s,通过001指向堆内存的对象这块内容
name:访问堆内存name对应的值 null

图6

s.age( 图7 )
s:指向栈内存 main方法里的 s,通过001指向堆内存的对象这块内容
age:访问堆内存age对应的值 0

图7

最后将两个值进行 字符串拼接,所以在控制台输出null,0
4.给成员变量赋值 s.name = "张曼玉";
s:指向栈内存 main方法里的 s,通过001指向堆内存的对象这块内容
name:访问堆内存name 值 修改为 "张曼玉"
同理:s.age
s:指向栈内存 main方法里的 s,通过001指向堆内存的对象这块内容
age:访问堆内存age的值修改为 28
再次输出(图8)

图8

5. 使用成员方法  s.study();
一调这个方法,study方法就要加载到栈内存
s: 这里的s就是mian方法里创建的s对象
这次,调用者s地址值(001)
study方法调用  进来之后控制台输出 好好学习  ,这个方法调用完毕,就会从栈内存中消失
再接着,调用 s.doHomework(); 这个方法
同样,doHomework方法就要加载到栈内存,调用者 s 也是mian方法中创建的s对象,地址值(001)
调用doHomework方法  控制台输出 多做练习    , 这个方法调用完毕,也会从栈内存中消失
6. 再往下执行,mian方法结束,从栈内存消失

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容