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

深入理解 Java 類與物件:核心概念完整指南

     編輯:Java 相關知識

在物件導向程式設計(OOP)的世界裡,類與物件是構建應用程式的基石。Java 作為一門純粹的物件導向語言,其核心思想在於將資料與操作資料的方法封裝在一起,形成可復用、可維護的模組。本文將系統性地剖析 Java 中類的定義、欄位與方法、物件的建立與記憶體模型,以及類之間的關係,助你建立扎實的 OOP 基礎。

一、類:物件的藍圖

類是建立物件的模板,描述了一組具有相同屬性與行為的物件共同特徵。打個比方:類就像建築藍圖,而物件則是根據藍圖建造出來的實體建築。在 Java 中,使用 class 關鍵字定義類:

public class Person {
    // 類的主體內容:欄位、建構子、方法等
}

1. 欄位與方法

類的主體主要包含兩類成員:

  • 資料成員(欄位/屬性):描述物件的靜態特徵,可以是基本型別或物件引用。例如:
class Person {
    String name;      // 物件引用,需初始化
    double salary;    // 基本型別,可直接賦值
}

每個物件擁有獨立的欄位儲存空間,互不共享。

  • 成員函數(方法):定義物件的行為。方法語法包含回傳型別、方法名、參數列表與方法體:
返回類型 方法名(參數列表) {
    // 方法體
}

呼叫方式為 物件名.方法名()。

2. 物件的建立與引用

使用 new 關鍵字在堆上分配記憶體並呼叫建構子初始化:

Person p = new Person(); // p 是指向 Person 物件的引用(句柄)

注意:宣告引用變數 String s; 並未建立物件,需初始化(s = "hello" 或 s = new String("hello"))才能使用,否則會拋出空指標異常。

3. 基本型別欄位的預設值

類的成員變數若未顯式初始化,Java 會自動賦予預設值:

型別預設值
booleanfalse
char'\u0000'
byte/short/int0
long0L
float0.0f
double0.0d
引用型別null

區域變數則無預設值,使用前必須初始化。

二、記憶體模型:資料存儲在哪裡?

Java 程式執行時,資料分佈在不同的記憶體區域:

  • 暫存器:CPU 內部,速度最快,由編譯器分配,不可直接控制。
  • 堆疊:儲存基本型別區域變數與物件引用,遵循 LIFO,生命週期隨作用域結束而釋放。
  • 堆:通用記憶體池,存放所有 new 出來的物件,由垃圾回收器管理,靈活但存取稍慢。
  • 靜態儲存區:存放 static 修飾的成員,程式啟動時分配,結束時釋放。
  • 常數池:存放字面常數與編譯期確定的符號引用。
  • 非 RAM 儲存:如序列化物件、檔案流等,獨立於程式生命週期。

三、物件的三大特徵

  1. 行為:物件能接收哪些訊息(呼叫哪些方法)。
  2. 狀態:物件內部欄位值的集合,僅能透過方法改變(封裝性)。
  3. 標識:區分具有相同行為與狀態的不同物件(記憶體地址/引用)。

封裝

將資料與操作資料的方法綁定,對外隱藏實作細節。類的欄位通常設為 private,提供 public 的 getter/setter 方法控制存取,確保資料完整性。

四、類之間的關係

  • 依賴 - use-a:某類方法操作另一類物件(參數、區域變數、靜態方法呼叫)。
  • 聚合 - has-a:某類包含另一類物件作為成員變數(整體與部分可獨立存在)。
  • 繼承 - is-a:子類擴展父類,獲得其非私有成員並可新增/覆寫功能(特殊化與一般化)。

Java 中物件變數實際上都是引用,new 回傳的也是引用,物件本身永遠在堆上。

五、總結

掌握類與物件是精通 Java 的關鍵。從類的定義、實例化、記憶體佈局到封裝與類關係,每一環都體現了 OOP 的核心思想:高內聚、低耦合。實戰中,善用封裝保護資料,合理設計類層級結構,才能寫出健壯、可擴充的系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved