class Phone1{
//定义成员变量
String brand;
int price;
String color;
//定义成员方法
public void call(String s){
System.out.println("打电话给"+s);
}
public void sendMessage(){
System.out.println("发信息");
}
public void listenMusic(){
System.out.println("听音乐");
}
}
public class PhoneTest2 {
public static void main(String[] args) {
//定义第一个手机对象
Phone1 p1 = new Phone1();
//给手机对象p1成员变量赋值
p1.brand = "小米";
p1.price = 1999;
p1.color = "白色";
System.out.println(p1.brand+"---"+p1.price+"---"+p1.color);
p1.call("雷军");
p1.sendMessage();
p1.listenMusic();
//定义第二个手机对象
Phone1 p2 = new Phone1();
p2.brand = "苹果";
p2.price = 4999;
p2.color = "绿色";
System.out.println(p2.brand+"---"+p2.price+"---"+p2.color);
p2.call("乔布斯");
p2.sendMessage();
p2.listenMusic();
}
}
内存中的解释:
Step1:程序先将class文件(Phone1.class,PhoneTest2.class)加载到方法区
Step2:把每个class文件的方法加载到class文件区
Phone1.class的方法:call(String s),sendMessage(),listenMusic() (假设这一部分地址值为0x001)
Phone2.class的方法:main()(假设这个方法区的地址值为0x002)
Step3:程序一开始运行,先将main方法加载到栈中来执行
Step4:读到Phone1 p1在栈中开辟空间,读到new Phone1在堆里面开辟空间(一个创建对象里面包括brand,price,color,方法区的标记0x001)
Step5:一开始创建出来的对象,系统给默认值:brand=null,price=0,color=null(假设在堆中创建对象的地址值为0x0001),初始化值全部都有结束以后,将地址值0x0001赋给变量p1(变量p1就能通过地址值找到对象在堆内存中的区域)
Step6:p1.brand = "小米";p1通过地址值(0x0001)找到堆内存中的对象区域,把"小米"赋给brand
p1.price = 1999;p1通过地址值(0x0001)找到堆内存中的对象区域,把1999赋给price
p1.color = "白色";p1通过地址值(0x0001)找到堆内存中的对象区域,把"白色"赋给color
......
Step7:p1.call("雷军");p1通过地址值(0x0001)找到堆内存中的对象区域中的方法区的标记0x001,找到call(String s)方法,然后将call方法加载到栈中来执行,结束以后,等待回收垃圾
Step8:p1.sendMessage();p1通过地址值(0x0001)找到堆内存中的对象区域中的方法区的标记0x001,找到sendMessage()方法,然后将sendMessage方法加载到栈中来执行,结束以后,等待回收垃圾
Step9:p1.listenMusic();p1通过地址值(0x0001)找到堆内存中的对象区域中的方法区的标记0x001,找到listenMusic()方法,然后将listenMusic方法加载到栈中来执行,结束以后,等待回收垃圾
Step10:读到Phone1 p2在栈中重新开辟空间,读到new Phone1在堆里面重新开辟空间(一个创建对象里面包括brand,price,color,方法区的标记0x001)
Step11:一开始创建出来的对象,系统给默认值:brand=null,price=0,color=null(假设在堆中创建对象的地址值为0x0002),初始化值全部都有结束以后,将地址值0x0002赋给变量p2(变量p2就能通过地址值找到对象在堆内存中的区域)
Step12:p2.brand = "苹果";p2通过地址值(0x0002)找到堆内存中的对象区域,把"苹果"赋给brand
p2.price = 4999;p2通过地址值(0x0002)找到堆内存中的对象区域,把4999赋给price
p2.color = "绿色";p2通过地址值(0x0002)找到堆内存中的对象区域,把"绿色"赋给color
......
Step13:p2.call("乔布斯");p2通过地址值(0x0002)找到堆内存中的对象区域中的方法区的标记0x001,找到call(String s)方法,然后将call方法加载到栈中来执行,结束以后,等待回收垃圾
Step14:p2.sendMessage();p2通过地址值(0x0002)找到堆内存中的对象区域中的方法区的标记0x001,找到sendMessage()方法,然后将sendMessage方法加载到栈中来执行,结束以后,等待回收垃圾
Step15:p2.listenMusic();p2通过地址值(0x0002)找到堆内存中的对象区域中的方法区的标记0x001,找到listenMusic()方法,然后将listenMusic方法加载到栈中来执行,结束以后,等待回收垃圾