【学习笔记】创建对象内存分析
Pet类:
package com.oop.demo02;
public class Pet {
public String name;
public int age;
public void shout(){
System.out.println("叫了一声");
}
}
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 类加载到方法区
然后执行main方法,把main方法压入栈中
main方法第一步首先new了一个Pet类,然后我们把Pet类模板加载到方法区
我们把new 的Pet类赋给 dog 时,在栈里创建了一个引用变量名dog,然后在堆中加载了一个真正的对象,这个对象的shout()方法 是调用的方法区中Pet模板的shout().
至此,Pet dog = new Pet(); 这条语句就执行完了。
然后我们给dog 的name 、 age 赋值,其中“二狗”是从常量池中取得.
这个时候,我们在new 一个新的Pet 名为cat
Pet cat = new Pet();
在栈中会压入引用变量名cat,堆中创建 了一个 新的Pet
引用变量
引用变量在栈中只是一个引用变量名,其真正指向的是堆中的对象
静态方法区