秦疆的Java课程笔记:65 面向对象 创建对象内存分析

发布时间 2023-12-12 16:36:58作者: Acolyte_9527

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();
  • 类中只有两个东西:
    • 静态的属性
    • 动态的行为(也就是方法)