Java 面向对象——内存图显示

1.代码如下:

//测试代码
public class Mytest {
    public static void main(String[] args) {
        Phone p1 = new Phone();
        p1.name="朵唯";
        p1.price=200;

        Phone p2 = new Phone();
        p2.price=500;
        Phone p3=p1;
        p3.name="中兴";
        p3.price=1300;

        System.out.println(p1.name);
        System.out.println(p1.price);
        System.out.println(p2.name);
        System.out.println(p2.price);
        System.out.println(p3.name);
        System.out.println(p3.price);

    }
}
//Phone.class
public class Phone {
    String name="华为";
    double price;
}

2.实现以上代码的内存图如下:

在这里插入图片描述
结合内存图,代码的运行结果如下:
中兴
1300.0
华为
500.0
中兴
1300.0

3.程序执行过程分析

程序中的jvm会从上到下,从左到右的遍历代码
1.运行class的文件,使用类加载器将MyTest.class加载到方法区,main方法入栈
2.在栈内存运行main方法,当jvm看到Phone类,会自动把Phone类加载到方法区;看到在main中创建一个对象Phone p1 = new Phone(),会给局部变量p1在栈中分配一段空间,而new Phone()会使得在堆中开辟一段空间,并将堆中的对应地址0x001赋值给p1,让p1指向堆中的内存0x001.然后改变name和age的值。
3.创建第二个对象Phone p2= new Phone(),同样也是实现让p2指向堆中新建的一段内存0x002.然后改变name和age的值。
4,创建第三个对象Phone p3=p1,是通过将p1赋值给p3,这样便让p3指向p1所指向的堆空间,然后改变name和age的值。
5.main方法结束后便出栈。

发布了46 篇原创文章 · 获赞 1 · 访问量 1023

猜你喜欢

转载自blog.csdn.net/qq_42022411/article/details/102373088