编写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();
}
}
绘制课堂上TestPerson类执行时的内存变化图
1.建立栈空间,堆空间,方法区。在栈里执行第一步,public static void main (String []args){}在栈里建立main方法的栈帧,用来存我们相关局部变量,参数,返回值等。第一个形参便是args,args:null。继续往下走,创建person p1,p1:null,
2.创建person对象,在栈里建立person栈帧,然后在堆里建立对象,属性,name:null;age:0;show方法放在方法区,可以共享设此地址为0x11将此地址给main。于是p1:0x11,地址给堆里的show就可以。
3.在执行类方法的时候首先第一步要加载类信息在方法区里面,建立person类信息。
P1.age = 24,p1.name = 张三,于是赋值给堆中的0x11的属性,name:来自于方法区的张三,引用方法区的地址,常量池里面,把方法区常量池里面提前设置好的张三的地址给堆中name。;age:24;p1》show,是方法,在栈里开辟p1.show 的栈帧,p1.show的栈帧的参数,默认参数this:0x11,相当于自己是对象调用了自己的方法,自己学习自己。Show方法完成后退出。
4.在栈中再开辟p2,在队中再建立对象,结构一样,数据可以不一样name:null;age:o;show:,设置此地址为0x12,则p2:0x12。把方法区的李四地址给0x12中的show。
在栈中建立p2.show的栈帧,this:0x12,然后调用name,age0x12的,执行完删掉,这是main方法也执行完了,main也删掉,其他的自然也都删掉,然后退出。