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

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

     編輯:Java 相關知識

Java 類型體系速覽

Java 支援四種基本類型:介面、類別、陣列、基本型別。前三者統稱參考型別,類別實例與陣列是物件,基本型別值不是物件。類別成員包含欄位、方法、成員類別、成員介面。方法特徵包含名稱與參數型別,**不包含回傳型別**。

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

類別提供 public static Type getInstance() 回傳實例,而非 new Type()。

優點

  1. 有名稱:Boolean.valueOf(String) 比 new Boolean(String) 更清晰表達意圖。
  2. 可控制實例數量:單例模式、物件池、享元模式皆仰賴此特性。
  3. 可回傳子型別:Collections.emptyList() 回傳 List 介面,實際類別隱藏。支援介面導向框架。

缺點

  1. 無 public 或 protected 建構子 → 無法繼承 (鼓勵組合大於繼承)。
  2. 與一般靜態方法無異,API 文檔較難識別 (慣用 valueOf, getInstance, newInstance 等命名)。

條款 4:避免建立重複物件

// 反面教材:每次新建 String 實例
String s = new String("sample"); // Don't do this!

"sample" 本身已是字面常量池中的 String 物件,再 new 多此一舉。

正確做法

  • 直接使用字面值:String s = "sample";
  • 頻繁呼叫的方法中,將不可變物件提升為 static final 常數或快取。
  • 可變物件 (如 StringBuilder) 若無共享需求,局部建立無妨。

補充:String 不可變性

String 為不可變字串,任何「修改」操作 (substring, replace, concat) 皆產生新物件。原引用指向的物件不變,這就是為何傳入方法修改後外部值不變的原因。頻繁拼接請用 StringBuilder。

小物件創建成本

現代 JVM (HotSpot) 對小物件分配/回收極度優化 (TLAB、逃逸分析、標量替換)。為了程式碼清晰、正確、功能強大而建立額外物件,通常是好事,勿過早優化。

總結

  • 靜態工廠與建構子各有用場,理解優劣再抉擇。
  • 善用不可變物件與常量池,避免無謂 new。
  • 小物件創建廉價,優先考慮 API 設計清晰度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved