学完对象内存图,理解创建对象和使用对象在内存中的执行流程
1.单个对象
程序执行是从main()方法开始的。
1. 首先,main()方法被加载到栈内存。
2. 创建对象。Student s = new Student();左边会在main()方法中出现;右边里有两个成员变量和两个成员方法(图2)。new的动作会在堆内存里开辟空间,成员变量放置如(图3)成员变量都具有默认值,同数组默认值规则。地址值001出现,把001赋值给 s ,s通过001指向堆内存学生对象(图4)。这样创建对象才算完成。接着输出 s 的值,s 的值就是001这个地址值,在控制台输出地址值001(图5)
3.使用成员变量。s.name (图6)
s:指向栈内存 main方法里的 s,通过001指向堆内存的对象这块内容
name:访问堆内存name对应的值 null
s.age( 图7 )
s:指向栈内存 main方法里的 s,通过001指向堆内存的对象这块内容
age:访问堆内存age对应的值 0
最后将两个值进行 字符串拼接,所以在控制台输出null,0
4.给成员变量赋值 s.name = "张曼玉";
s:指向栈内存 main方法里的 s,通过001指向堆内存的对象这块内容
name:访问堆内存name 值 修改为 "张曼玉"
同理:s.age
s:指向栈内存 main方法里的 s,通过001指向堆内存的对象这块内容
age:访问堆内存age的值修改为 28
再次输出(图8)
5. 使用成员方法 s.study();
一调这个方法,study方法就要加载到栈内存
s: 这里的s就是mian方法里创建的s对象
这次,调用者s地址值(001)
study方法调用 进来之后控制台输出 好好学习 ,这个方法调用完毕,就会从栈内存中消失
再接着,调用 s.doHomework(); 这个方法
同样,doHomework方法就要加载到栈内存,调用者 s 也是mian方法中创建的s对象,地址值(001)
调用doHomework方法 控制台输出 多做练习 , 这个方法调用完毕,也会从栈内存中消失
6. 再往下执行,mian方法结束,从栈内存消失