String、Integer 等不可變類別。配合 try/catch 使用,無論是否拋出異常、是否有 return 語句,finally 區塊都會在控制權轉移前執行。典型用途:關閉資源(流、連接、鎖)確保不洩漏。
屬於 Object 類別,GC 在回收物件前調用。不建議依賴: 調用時間不確定、可能導致物件復活、嚴重影響 GC 效能。Java 9 標記為棄用,建議改用 try-with-resources 或 Cleaner 機制。
@Override
protected void finalize() throws Throwable {
try { /* 釋放原生資源、關閉檔案 */ }
finally { super.finalize(); }
}
| 特性 | 重載 | 重寫 |
|---|---|---|
| 定義 | 同一類別中,方法名相同,參數列表不同(類型、個數、順序) | 子類別重新定義父類別方法,方法簽名(名稱、參數、返回型別)完全一致 |
| 返回型別 | 可不同 | 必須相同或為協變型別 |
| 存取修飾符 | 無限制 | 不能比父類別更嚴格(如父 protected,子不能 private) |
| 拋出異常 | 無限制 | 不能拋出比父類別更廣的檢查型異常 |
| 多型性 | 編譯期靜態綁定 | 執行期動態綁定,體現多型 |
Object[] 陣列,預設容量 10,擴容 1.5 倍。synchronized,執行緒安全但效能低,已被 Collections.synchronizedList 或 CopyOnWriteArrayList 取代。List、Deque,頭尾增刪 O(1),隨機存取 O(n)。put/get 平均 O(1)。// ArrayList
List<String> list = new ArrayList<>();
list.add("one"); list.add("two");
System.out.println(list.get(0)); // "one"
// LinkedList + Iterator
LinkedList<String> dll = new LinkedList<>();
dll.add("two"); dll.add("one");
for (String s : dll) System.out.println(s);
// HashMap
Map<String, String> map = new HashMap<>();
map.put("one", "1"); map.put("two", "2");
System.out.println(map.get("one")); // "1"
ArrayList、HashMap、HashSet。Collections.synchronizedXxx、ConcurrentHashMap、CopyOnWriteArrayList。LinkedList 或 ArrayDeque。LinkedHashMap/Set(插入序)、TreeMap/Set(自然序/自訂序)。