- java内存变化图
- 代码:
编写Person类
public class Person {
String
name;
int age;
public void show(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
创建Person类对象并使用
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中的agrs默认为null,创建p1,默认值为null
2方法区创建Person类
3堆里建立Person对象name默认值为null,age默认值为0,show方法为了每次调用地址传给show()方法信息,放在person类里
4执行放在main栈帧里的p1,p1值为堆里person对象的地址0x10
5执行程序p1.age:24, 在方法池里创建"张三",“李四”,p1.name调用"张三"的地址
6开创新的栈帧p1.show(),栈帧里默认传入隐式参数this:0x10,执行完退出。
7main栈帧里创建p2,默认值为null
8堆里新建对象,执行放在main栈帧里的p2,p2值为堆里person对象的地址0x11
9执行程序p2.age:35, 在方法池里创建"张三",“李四”,p2.name调用"李四"的地址
10开创新的栈帧p2.show(),栈帧里默认传入隐式参数this:0x11,执行完退出。