- 先写两个类
//创建一个Pet类==============================
package OOP.demo;
public class Pet {
public String name;
public int age;
public void shout() {
System.out.println("喵~~");
}
}
//主程序Application==========================
package OOP;
import OOP.demo.Pet;
public class Application {
public static void main(String[] args) {
Pet cat = new Pet();
cat.name = "Sherlock";
cat.age = 4;
cat.shout();
System.out.println(cat.name);
System.out.println(cat.age);
}
}
- 内存分析图:
- 程序运行最开始,加载Application的主程序方法在方法区。(方法区也在堆中)
- 此时,带有关键词static的“类的静态成员”也和“类”一起加载。(之前笔记里我把这个叫“类的静态家族”,也不知道在哪儿看的了,后来感觉“类的静态成员”这个译名更舒服一些)
- 之后执行main方法,main方法总是在栈的底部。一般main方法结束时,程序也就结束了。
Pet cat = new Pet();
时,对应加载了Pet方法,即import OOP.demo.Pet;
,此时Pet方法也进入方法区。- 同时,生成的对象cat,在栈中出现一个引用变量名,在堆中也分配了相应的内存空间。栈中的cat是一个地址,指向堆中cat实际的数据。
- 此时cat的name、age等未赋值,都是默认值。
- 之后
cat.name = "Sherlock";
和cat.age = 4;
为cat赋值,更新堆中的数据。