《Effective Java》作為 Java 開發者的必讀經典,系統性地總結了 Java 程式設計的最佳實踐。本文整理了書中關於物件創建與銷毀、所有物件通用的方法、類與介面、泛型、枚舉與註解、方法設計、通用程式設計、異常處理、併發與序列化等核心章節的重點內容,供開發者快速查閱與複習。
這部分探討何時以及如何創建物件、如何避免創建不必要的物件、如何確保物件被適時銷毀,以及管理銷毀前的清理工作。
靜態工廠方法相較於建構子具有四大優勢:
valueOf、of、getInstance 等慣用命名。HashMap.newInstance()。缺點在於:不含公有或受保護建構子的類無法被子類化;靜態工廠方法與其他靜態方法無法區分,需遵循命名慣例。
當建構子參數超過 4 個時,重疊建構子模式與 JavaBean 模式皆有缺陷。建構器模式結合了安全性與可讀性:客戶端先調用建構子獲取 Builder 物件,再透過類 Setter 方法設置可選參數,最後調用無參 build() 生成不可變物件。適用於參數較多、且存在許多可選參數的場景。
單例模式三種實現方式:
INSTANCEgetInstance()工具類應拋出 AssertionError 防止被實例化,單純宣告為抽象類無效。
記憶體洩漏三大常見來源:
WeakHashMap。WeakReference)。finalize() 執行時機不可預測、效能損耗大、不保證執行。應提供顯式終止方法(如 close())並配合 try-finally 使用。僅作為「安全網」或清理本地對等體時使用。
深入分析 equals、hashCode、toString、clone 與 finalize 的正確實作規約。
涵蓋類層級的可存取性最小化、優先選擇複合而非繼承、介面優於抽象類、為繼承而設計或禁止繼承等指導原則。
掌握類型擦除、有界型別參數、通配符(PECS 原則)、泛型方法與型別推論等核心概念。
枚舉取代 int 常量、策略枚舉模式、使用註解替代命名模式、標準註解類型(@Override、@Deprecated、@SuppressWarnings)的正確使用。
參數有效性檢查、防禦性複製、慎用重載、謹慎使用可變參數、回傳空集合而非 null、文檔註解規範等。
局部變數最小化作用域、for-each 迴圈優於傳統 for 迴圈、了解類庫、避免使用 float/double 進行精確計算、基本類型優於裝箱類型、謹慎使用反射與本地方法、優化原則與命名慣例。
僅對異常情況使用異常、受檢異常用於可恢復情況、執行時異常用於程式錯誤、避免不必要的受檢異常、標準異常復用、拋出與抽象層級對應的異常、文檔記錄所有拋出的異常、失敗原子性、不忽略捕獲的異常。
同步存取共享可變資料、避免過度同步、Executor 與 Task 分離、併發工具類優於 wait/notify、線程安全性文檔化、慎用延遲初始化、不依賴線程排程器、避免使用線程組。
謹慎實作 Serializable、自定義序列化形式、保護性寫入 readObject、序列化代理模式、serialVersionUID 管理等。