单个对象的内存图分析:
首先将main 方法加载到栈内存中.
接下来, 创建对象.
左边的Student s, 就会在栈内存中出现.
new 的Student() 类中也有两个成员变量和两个成员方法.
这个new 的动作就会再堆内存去开辟空间.
成员变量在堆内存中的存放情况如下图所示, 成员变量的默认值规则, 同数组的默认值规则是一样的.
这块堆内存的地址值是001.
然后右边的new Student(), 就把001赋值给左边的Student s , 赋值后, 就相当于
Student s = 001
那么s 就通过001 指向了堆内存这个学生对象,
这样之后, 创建对象就算做完了.
下面这行代码要输出s 的值, 而s 的值就是001 这个地址值, 所以这次在控制台输出地址值001.
接下来, 来使用成员变量.
main 方法里面这个s , 通过001指向堆内存中对应地址值001.
然后name 访问的是堆内存中的name 对应的值, 也就是null.
所以s.name 这个值是null.
同理s.age 的值为0.
然后把这两个值进行字符串的拼接, 输出 null, 0.
接下来给成员变量赋值.
name 的值修改为 "张曼玉"
同理age 的值修改为28.
再次进行字符串的拼接, 输出的是"张曼玉, 28"
接下来调用成员方法,
一调用study 方法, study 方法就加载到栈内存.
这个s 其实就是main 方法中创建的s 对象, 所以调用者s 的地址值是001.
进入study 这个方法之后, 就会再控制台输出"好好学习"
当study 这个方法执行完毕, 就会从栈内存中消失.
同理, doHomework 这个方法输出了"多做练习".
方法调用完毕, 也会从栈内存中消失.
再往下执行,main 方法也执行完毕, 然后main 方法也会从内存中消失.
代码演练:
Java基础_103. 单个对象(内存图分析)
最新推荐文章于 2023-02-17 16:42:28 发布