1. final / finally / finalize 三兄弟
| 關鍵字 | 角色 | 核心規則 |
final | 修飾符 | 類不可繼承、方法不可覆寫、變數不可變更(編譯期常量或執行期唯一賦值) |
finally | 異常處理區塊 | try-catch 後必執行,用於資源釋放,即使有 return 也會執行 |
finalize() | Object 方法 | GC 回收前由 JVM 呼叫,用於釋放非記憶體資源(檔案控制代、Socket),不可依賴時機 |
2. 匿名內部類繼承/實作規則
- 可繼承一個類 或 實作一個介面,不可同時做兩者。
- 本質:隱式定義一個繼承指定類/實作指定介面的子類別,並立即建立實例。
3. Static Nested Class vs Inner Class
| 特性 | Static Nested Class | Inner Class (非靜態) |
| 外部類實例 | 不需要 | 需要 |
| 訪問外部實例成員 | 不可直接訪問 | 可直接訪問 |
| 本質 | 頂層類別的靜態成員 | 隱含持有外部實例引用 |
4. & vs &&
&:位運算邏輯與(雙邊必評估)
&&:短路邏輯與(左側 false 則右側不評估)
5. HashMap vs Hashtable
| 特性 | HashMap | Hashtable |
| 同步 | 非同步(高效能) | 同步(較慢) |
| Null 鍵/值 | 允許一個 null key、多個 null value | 完全禁止 |
| 繼承 | Map 介面 | Dictionary 抽象類(舊API) |
6. Collection vs Collections
Collection:頂層集合介面(List、Set、Queue 父介面)
Collections:工具類,提供排序、搜尋、同步包裝等靜態方法
7. assert 斷言使用指南
- 語法:
assert expr1 : expr2;(expr1 為 boolean,expr2 為錯誤訊息物件)
- 適用:私有方法前置條件檢查、程式碼不可達路徑驗證、後置條件測試
- 禁用:公共方法參數檢查(必須永遠生效)、改變程式狀態的運算
- 啟用:編譯
-source 1.4,執行 -ea / -da 控制
8. GC 基礎認知
- GC = Garbage Collector,自動記憶體管理,開發者無需手動
free
- 請求 GC:
System.gc() 或 Runtime.getRuntime().gc()(僅建議,非強制)
- 現代 JVM 採用分代收集、並行/並發/低延遲多種演算法(G1、ZGC、Shenandoah)
9. String s = new String("xyz") 建立幾個物件?
兩個:字串常量池中 "xyz"(若不存在則建立),堆積區 new String(...) 建立的新物件。面試經典題,考察常量池與堆區區別。