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

Effective Java 核心筆記:物件創建、銷毀與通用方法精要

     編輯:Java 綜合教學

Effective Java 核心筆記:物件創建、銷毀與通用方法精要

引言

《Effective Java》作為 Java 開發者的必讀經典,系統性地總結了 Java 程式設計的最佳實踐。本文整理了書中關於物件創建與銷毀、所有物件通用的方法、類與介面、泛型、枚舉與註解、方法設計、通用程式設計、異常處理、併發與序列化等核心章節的重點內容,供開發者快速查閱與複習。

創建和銷毀物件

這部分探討何時以及如何創建物件、如何避免創建不必要的物件、如何確保物件被適時銷毀,以及管理銷毀前的清理工作。

第 1 條:考慮用靜態工廠方法代替建構子

靜態工廠方法相較於建構子具有四大優勢:

  • 有名稱:讓回傳物件的特性更明確,如 valueOf、of、getInstance 等慣用命名。
  • 不必每次調用都創建新物件:可實現單例模式、物件池或享元模式,提升效能。
  • 可回傳原回傳類型的任何子類型物件:支援服務提供者框架(SPI),包含服務介面、提供者註冊 API、服務訪問 API 與服務提供者介面四大組件。
  • 創建參數化類型實例時更簡潔:利用語法糖簡化泛型程式碼,如 HashMap.newInstance()。

缺點在於:不含公有或受保護建構子的類無法被子類化;靜態工廠方法與其他靜態方法無法區分,需遵循命名慣例。

第 2 條:遇到多個建構子參數時要考慮用建構器模式

當建構子參數超過 4 個時,重疊建構子模式與 JavaBean 模式皆有缺陷。建構器模式結合了安全性與可讀性:客戶端先調用建構子獲取 Builder 物件,再透過類 Setter 方法設置可選參數,最後調用無參 build() 生成不可變物件。適用於參數較多、且存在許多可選參數的場景。

第 3 條:用私有建構子或枚舉類型強化 Singleton 屬性

單例模式三種實現方式:

  1. 公有靜態最終欄位 INSTANCE
  2. 私有靜態最終欄位 + 靜態工廠方法 getInstance()
  3. 單元素枚舉類型(推薦):語法最簡潔、免費提供序列化機制、絕對防止多次實例化(含反射攻擊)。

第 4 條:通過私有建構子強化不可實例化的能力

工具類應拋出 AssertionError 防止被實例化,單純宣告為抽象類無效。

第 5 條:避免創建不必要的物件

  • 優先重用不可變物件(如字串字面值、靜態工廠方法)。
  • 將昂貴物件提升為靜態最終常量(如正則表達式 Pattern、Calendar 實例)。
  • 優先使用基本類型而非裝箱類型,警惕自動裝箱效能損耗。
  • 除非物件極其重量級(如資料庫連線池),否則別自行維護物件池。

第 6 條:消除過期的物件引用

記憶體洩漏三大常見來源:

  • 類自行管理記憶體(如陣列實作的 Stack 需手動將過期元素設為 null)。
  • 快取:鍵的外部引用決定生命週期時可用 WeakHashMap。
  • 監聽器與回調:僅保存弱引用(WeakReference)。

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

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 管理等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved