首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 物件導向基石:類別與物件定義、實例化、記憶體模型完整解析

     編輯:Java 相關知識

一、核心概念辨析

概念定義比喻
類別抽象模板,定義屬性與行為建築藍圖
物件類別的具體實例,佔有記憶體依藍圖建好的房子
關係類別是物件的類型;物件是類別的實例化一張藍圖 → 可建多棟房子

二、Java 中定義類別

public class Person {
    // 屬性(成員變數)
    private String name;
    private int age;
    private String gender;

    // 建構子
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // 方法(行為)
    public void introduce() {
        System.out.println("我是 " + name + ",今年 " + age + " 歲,性別:" + gender);
    }

    // Getter/Setter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    // ... 省略 age、gender
}

三、物件的宣告、實例化與初始化

// 1. 宣告參考變數(棧上,佔 4/8 bytes)
Person p1;

// 2. 實例化:new 分配堆記憶體,呼叫建構子初始化
p1 = new Person("小明", 18, "男");

// 3. 合寫
Person p2 = new Person("小紅", 20, "女");

記憶體圖解

棧                    堆
┌─────────┐          ┌──────────────────┐
│ p1 ─────┼────────▶ │ Person 对象       │
└─────────┘          │ name="小明"       │
                     │ age=18            │
                     │ gender="男"       │
                     └──────────────────┘

四、完整範例:空調類別

public class AirConditioner {
    // 屬性
    String brand;
    String model;
    int power;      // 匹數
    int temperature;

    // 行為
    public void cool() { temperature--; }
    public void heat() { temperature += 2; }
    public void display() {
        System.out.println(brand + " " + model + " (" + power + "匹) 當前溫度:" + temperature + "°C");
    }

    public static void main(String[] args) {
        AirConditioner ac = new AirConditioner();
        ac.brand = "美的";
        ac.model = "KFR-35GW";
        ac.power = 1.5;
        ac.temperature = 26;

        ac.cool();      // 25°C
        ac.heat();      // 27°C
        ac.display();
    }
}

五、深度補充:記憶體模型與生命週期

1. 物件建立流程

  1. 類別載入檢查
  2. 堆記憶體分配(指標碰撞/空閒列表)
  3. 記憶體歸零(除 object header)
  4. 設定 object header(類別指標、HashCode、GC 年齡、鎖狀態)
  5. 執行 `` 方法(建構子邏輯、欄位初始化)

2. 物件存取定位

  • 句柄池:reference → handle → (instance data, type data)
  • 直接指標:reference → instance data(HotSpot 預設)

3. 物件銷毀與 GC

  • 不可達物件 → 標記-清除/整理/複製 → 回收
  • finalize() 已棄用,改用 try-with-resources / Cleaner

六、常見誤區

誤區正確認知
類別與物件同義類別是模板,物件是實例;一個類別可建多個物件
new 每次建立相同內容每次 new 分配新記憶體,地址不同;內容相同但非同一物件
參考變數即物件參考變數在棧,物件在堆;參考可為 null、可重新指向
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved