TestPerson类执行时的内存变化图
public class Person {
String name;
int age;
public void show(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class TestPerson {
public static void main(String[ ] args) {
// 创建p1对象
Person p1 = new Person();
p1.age = 24;
p1.name = "张三";
p1.show();
// 创建p2对象
Person p2 = new Person();
p2.age = 35;
p2.name = "李四";
p2.show();
}
}
1、首先需要找到main方法运行程序 可以知道main方法在TestPerson中,所以需要先加载TestPerson类,并在栈开一个main栈帧
2、代码往下走到 Person p1 = new Person();
首先到Person p1 会先加载Person类 并且在main方法中 加入局部变量p1
然后利用new关键字在堆内存中创建对象 ,附带一个地址 并且将对象成员变量默认初始值
再调用构造器 初始化 然后返回地址给p1
3、继续 p1.age = 24;
p1.name = “张三”;
p1.show(); show()方法会在栈中开一个栈帧 当方法运行结束后会清除
4、Person p2 = new Person();
p2.age = 35;
p2.name = “李四”;
p2.show();
因为类只需要加载一次,所以在 Person p2 时候会检查是否已经加载Person ,后面同上在堆中建立一个对象
5、最后程序运行完后、栈中是 先进后出所以是 show()方法先出栈然后是main,最后jvm中内存会清空