对象内存图
-
程序执行 方法区加载
Test
字节码文件 包含主方法main
-
主方法被虚拟机自动调用执行 进到栈内存
-
方法区创建对象
Student
临时存储 包含 成员变量 成员方法 -
加载
class
文件Student
-
申明局部变量
stu1
-
在堆内存开辟一个新的空间
7ef20235
(只要有 new 就是在堆里面开辟了一个小空间) -
默认初始化值(String 类型的值 默认初始化为null , int 为 0)
-
显式初始化(如果有默认赋的值 则会用赋的值)
-
构造方法初始化(空参不必初始化,有参构造有值进行初始化)
-
堆内存中的地址赋值给左边的局部变量
7ef20235
Student stu = 7ef20235
stu
可以通过地址值找到堆内存中开辟的空间
-
-
stu
通过地址值找到name
对齐赋值张三
-
stu
通过地址值找到 成员方法的地址 ,通过成员方法地址调用study()
(多个对象共用同一个成员方法) -
stydy()
加载进栈 执行输出语句 -
执行完毕
study()
出栈 -
整个
main
方法执行完毕 出栈 -
因为无变量指向堆内存的地址 ,堆内存地址变成垃圾 消失