【学习笔记】创建对象内存分析

创建对象内存分析

Pet类:

package com.oop.demo02;
​
public class Pet {
    public String name;
    public int age;
    public void shout(){
        System.out.println("叫了一声");
    }
}

Application类:

package com.oop;
​
import com.oop.demo01.Person;
import com.oop.demo02.Pet;
​
public class Application {
    public static void main(String[] args) {
        Pet dog = new Pet();
        dog.name="二狗";
        dog.age = 3;
        dog.shout();
    }
}

首先程序运行,先将Application 类加载到方法区

image-20220717150411523

 

然后执行main方法,把main方法压入栈中

main方法第一步首先new了一个Pet类,然后我们把Pet类模板加载到方法区

image-20220717151912951

我们把new 的Pet类赋给 dog 时,在栈里创建了一个引用变量名dog,然后在堆中加载了一个真正的对象,这个对象的shout()方法 是调用的方法区中Pet模板的shout().

image-20220717152019822

 

至此,Pet dog = new Pet(); 这条语句就执行完了。

 

然后我们给dog 的name 、 age 赋值,其中“二狗”是从常量池中取得.

image-20220717152155645

 

这个时候,我们在new 一个新的Pet 名为cat

Pet cat = new Pet();

在栈中会压入引用变量名cat,堆中创建 了一个 新的Pet

image-20220717152815958

 

 

 

引用变量

引用变量在栈中只是一个引用变量名,其真正指向的是堆中的对象

 

静态方法区

带有static关键词的方法,它们和类一起加载,所以所有类都可以调用它

posted @ 2022-07-17 15:36  GrowthRoad  阅读(22)  评论(0编辑  收藏  举报