65 面向对象 创建对象内存分析
//创建一个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赋值,更新堆中的数据。
66 面向对象 简单小结类与对象
- 类与对象
- 方法
- 对象的引用
- 属性:字段Field,成员变量
- 默认初始化,数字默认0或0.0,char默认u0000,boolean默认false,所有引用类型默认为null
- 属性的定义
修饰符 属性类型 属性名 = 属性值
- 对象的创建和使用
- 必须使用new关键字创建对象。构造器。
Person acolyte = new Person();
- 对象的属性,
acolyte.name;
- 对象的方法,
acolyte.sleep();
- 类中只有两个东西: