靜態方法
static 修飾,屬於類而非實例
- 可直接呼叫同類 靜態成員(欄位/方法)
- 不可直接存取非靜態成員(需
new ClassName().instanceField)
main 方法即標準靜態方法入口
靜態初始化塊
static {
// 類載入時自動執行,僅執行一次
// 僅能初始化 static 欄位
}
- 類載入階段(
ClassLoader.defineClass 後)由 JVM 執行
- 多個靜態塊按聲明順序依序執行
- 不可拋出受檢異常(只能 try-catch 或拋 RuntimeException)
初始化順序總表
1. 父類 static 欄位 → 父類 static 塊
2. 子類 static 欄位 → 子類 static 塊
3. 父類 instance 欄位 → 父類 instance 塊 → 父類建構子
4. 子類 instance 欄位 → 子類 instance 塊 → 子類建構子
封裝、繼承、多態核心速查
| 特性 | 關鍵點 |
| 封裝 | private 欄位 + public getter/setter;隱藏實作細節 |
| 繼承 | 單繼承;extends;子類擁有父類非 private 成員 |
| 多態 | 向上轉型自動、向下轉型需強轉 + instanceof 守衛 |
訪問修飾符可見性矩陣
| 本類 | 同包 | 子類 | 其他 |
| private | ✓ | ✗ | ✗ | ✗ |
| default | ✓ | ✓ | ✗ | ✗ |
| protected | ✓ | ✓ | ✓ | ✗ |
| public | ✓ | ✓ | ✓ | ✓ |
final 關鍵字四大用法
final class:不可被繼承
final method:不可被覆寫
final field:宣告時或建構子中必須且僅能賦值一次
final variable:參考不變(物件內容仍可變)
super 關鍵字三大用途
super.field / super.method():存取父類被遮蔽成員
super(...):子類建構子第一行顯式呼叫父類建構子
- 若父類無無參建構子,子類必須顯式
super(...)
Object 核心方法重寫指南
toString():預設 ClassName@hashCode,建議輸出業務關鍵欄位
equals():預設比較記憶體位址,業務類必須重寫(滿足自反/對稱/傳遞/一致/非空)
hashCode():與 equals 契約綁定,同樣欄位參與計算
抽象類 vs 介面(JDK 8+)
| 維度 | abstract class | interface |
| 方法實現 | 可有實例方法 | default/static 方法可有實現 |
| 欄位 | 任意 | 隱含 public static final |
| 建構子 | 可有 | 無 |
| 多實現 | 單繼承 | 多實現 |
匿名內部類經典場景
new Thread(new Runnable() {
@Override public void run() { /* ... */ }
}).start();
// 介面單方法 → Lambda 替代
Runnable r = () -> { /* ... */ };