預設情況下,類的成員變數與方法需透過 new 建立物件後才能存取。但有時我們希望:
Math.sqrt()),直接以類名呼叫。static 關鍵字正是為此而生——它在類載入階段就為成員配置記憶體,脫離具體物件實例。
class Circle {
static float PI = 3.14f; // 類載入時就分配唯一儲存空間
}
無論建立多少 Circle 實例,PI 在記憶體中只有一份,所有物件共享。
Circle.PI,語意清晰,一眼識別為靜態成員。類名.方法名() 呼叫。this 不存在)。java.lang.Math、Collections)、單例模式、工廠方法。| 維度 | 靜態變數 | 靜態方法 |
|---|---|---|
| 解決問題 | 多物件共享資料 | 無物件即可呼叫行為 |
| 儲存空間 | 類載入時唯一分配 | 程式碼區共享,無額外物件級儲存 |
ThreadLocal / Atomic*。static 欄位不參與序列化(transient 效果相同)。MAX_SIZE),非常數駝峰式(instanceCount)。善用 static 能簡化設計、提升效能,但必須理解其「屬於類、不屬於物件」的本質,並在多執行緒環境下謹慎管理共享狀態。