首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Effective Java 讀書筆記(一):建立與銷毀物件最佳實踐

     編輯:Java 相關知識

條目 1:靜態工廠方法替代建構子

  • 優點:有名稱、可回傳快取/子型別、簡化泛型建構語法。
  • 缺點:無 public 建構子無法繼承、Javadoc 難以發現、需遵循命名慣例。
  • 慣用命名:valueOf、getInstance、newInstance、getType、newType。

條目 2:建構子參數過多時使用 Builder 模式

  • 重疊建構子與 JavaBean 模式皆有缺陷(參數順序易錯、執行緒不安全、不可變性破壞)。
  • Builder 模式:鏈式呼叫、參數自檢、建構不可變物件。

條目 3:私有建構子或枚舉型別強化 Singleton

  • 傳統雙重檢查鎖定在 Java 5+ 可行,但需 volatile。
  • 單元素枚舉 是實作 Singleton 最佳方式:序列化安全、防反射攻擊、程式碼簡潔。

條目 4:私有建構子強化非實例化類別

  • 工具類(如 Collections、Arrays)應拋出 AssertionError 防止實例化與子類化。

條目 5:避免建立不必要的物件

  • 字串字面值重用、Boolean.valueOf() 替代 new Boolean()、靜態工廠回傳快取實例。
  • 自動裝箱/拆箱隱性建立物件,效能敏感區域慎用。

條目 6:消除過期物件參考

  • 堆疊 pop() 後未將陣列元素設 null 導致記憶體洩漏。
  • 快取需用 WeakHashMap 或 LinkedHashMap.removeEldestEntry() 自動清理。
  • 監聽器/回調持有弱參考(WeakReference)。

條目 7:避免使用終結方法

  • finalize() 執行時機不確定、效能差、無序執行、異常會中斷清理。
  • 改用 try-with-resources / AutoCloseable 明確釋放資源。
  • 若必須覆寫 finalize(),務必呼叫 super.finalize()。

實戰應用建議

  1. 設計類別時先思考:是否需單例?參數多寡?是否不可變?
  2. 編寫高頻程式碼時檢視:物件是否可重用?集合元素是否會過期?是否需顯式關閉資源?
  3. 善用 Heap Profiler 等工具定位記憶體洩漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved