ClassName.fieldName(推薦)或 instance.fieldName(不推薦)ClassName.methodName() 調用Parent p = new Child(); p.staticMethod() 調用父類方法static {
// 類加載時執行一次,用於複雜靜態字段初始化
// 按聲明順序執行,優於構造器
}
類加載觸發條件:創建實例、調用靜態方法/字段、反射 Class.forName、子類加載(先加載父類)。
static final int MAX = 100)進入常量池,調用處內聯替換final List list = new ArrayList<>(); list.add("a"); // ✅ 合法 String、Integer、包裝類public abstract class DataProcessor {
// 模板方法:final 鎖定流程
public final void process() {
readData();
doProcess(); // 抽象步驟
writeData();
}
protected abstract void doProcess(); // 子類實現
private void readData() { /* 通用邏輯 */ }
private void writeData() { /* 通用邏輯 */ }
}
| 組合 | 合法性 | 原因 |
|---|---|---|
| abstract + final | ❌ | abstract 要求重寫,final 禁止重寫 |
| abstract + private | ❌ | private 不可繼承,子類不可見,無法重寫 |
| abstract + static | ❌ | static 方法屬於類,無多態,調用父類抽象方法無意義 |
| static + final | ✅ | 常用於常量 static final,或工具類靜態方法 |
| final + private | ✅ | 雙重保險,但 private 已隱式 final |
1. 父類靜態字段/靜態塊(按順序)
2. 子類靜態字段/靜態塊(按順序)
3. 父類實例字段/實例塊
4. 父類構造器
5. 子類實例字段/實例塊
6. 子類構造器
注意:final 實例字段必須在構造器結束前確定賦值(聲明處、實例塊、構造器三選一)。