2.对象的内存图

BUG之神 20

 

2.对象的内存图 

程序执行从main方法开始,因此main方法会先加载到栈内存

2.对象的内存图 

左边的Student s在栈内存存储,new操作会在堆内存开辟空间,成员变量的放置方式与数组类似,默认值中String默认值为null,int默认值为0

2.对象的内存图 

这样的操作完成后,地址001(假设地址为001)赋值给变量s,001便指向堆内存学生对象

2.对象的内存图 

当打印s时,就是打印001地址值

2.对象的内存图 

输出成员变量,s指向栈内存,通过地址001指向堆内存,name访问的是堆内存name对应的值null,s.age原理类似

2.对象的内存图 

 

修改成员变量的值,s位于栈内存,通过001指向堆内存,将name赋值,则将原始的null修改为张曼玉

2.对象的内存图 

 

调用成员方法,study加载到栈内存,说明:我们的s是main中创建的s对象

 

2.对象的内存图 

这个s的地址是001,调用时,就会输出好好学习

2.对象的内存图 

当执行完毕,study就会从栈内存消失

2.对象的内存图 

当执行到最后,main方法也会从栈内存消失

2.对象的内存图 

运行代码:

2.对象的内存图 

2.对象的内存图 

多个对象与单个对象类似,自行理解,不再赘述

调用属性

2.对象的内存图 

调用方法

2.对象的内存图 

第2个对象

2.对象的内存图 

2.对象的内存图 

调用方法,这里的s2的地址是002

2.对象的内存图 

测试

2.对象的内存图 

运行:

2.对象的内存图 

2.对象的内存图 

注意这里是将s1的地址赋值给s2,所以s1,s2指向的是同一个对象

2.对象的内存图2.对象的内存图 

测试:

2.对象的内存图 

运行:

2.对象的内存图 

 

 

分享