Effective Java, 3/e (簡體中文版)

[美] 約書亞·布洛克 (Joshua Bloch)

買這商品的人也買了...

相關主題

商品描述

本書是Jolt獲獎作品的全新升級版,針對Java 7、8、9全面更新,是Java程序員的必備參考書。

全書共12章,90條。

第1章為引言;

第2章闡述何時以及如何創建和避免創建對象,如何確保對象能夠適時地銷毀,以及如何管理對象銷毀之前必須進行的各種清除動作;

第3章闡述所有對像都通用的方法,如equals、hashCode、toString、clone和finalize以及Comparable.compareTo方法等;

第4章闡述作為Java語言的核心以及Java語言的基本抽象單元(類和接口)在使用上的一些指導原則,以設計出更加有用、健壯和靈活的類與接口;

第5章和第6章分別闡述在Java 1.5發行版本中新增加的泛型、枚舉和註解的最佳實踐,教你如何最大限度地享有這些優勢;

第7章討論在Java 8中新增的函數接口、Lambda、方法引用,和為處理數據元素的序列提供類庫級別支持的Stream API;

第8章討論方法設計的幾個方面:如何處理參數和返回值,如何設計方法簽名,如何為方法編寫文檔,從而使方法設計在可用性、健壯性 靈活性上有進一步的提升;

第9章主要討論Java語言的具體細節,包括局部變量的處理、控制結構、類庫的使用、各種數據類型的用法、反射機制和本地方法的用法,以及優化和命名慣例;

第10章闡述如何充分發揮異常的優點來提高程序的可讀性、可靠性和可維護性,以及減少異常使用不當所帶來的負面影響,並提供了一些關於有效使用異常的指導原則;

第11章闡述寫出清晰、正確、文檔組織良好的並發程序;第12章講解序列化方面的技術,其中包括序列化代理模式,它可以幫助你避免對象序列化的許多缺陷。

本書第2版是在Java 6發行之後不久出版的,此後Java又發生了巨大的變化。這本Jolt獲獎作品現在已經針對Java 7、8、9進行了全面的更新,充分展示了新的Java編程語言及其類庫特性。

當前的Java編程語言支持多種範型,這使得Java程序員迫切需要具體的實踐建議,而本書正是為此而生的。與本書前兩版一樣,書中每一章都包含幾個“條目”,每個條目都以簡潔的形式呈現,自成獨立的短文。它們提出了具體的建議,揭示了Java平台的精妙之處,並更新了之前的代碼範例。每個條目的綜合描述和解釋都闡明了應該怎麼做,不應該怎麼做,以及為什麼。

本書的內容涵蓋了Java 7、8和9中新增的語言及類庫特性,包括在其面向對像根部添加的函數編程構造。書中增加了許多新的條目,如其中有一章是專門講解Lambda表達式和Stream的。
本書新增內容包括:
函數接口、Lambda表達式、方法引用,以及Stream 
接口中的缺省方法和靜態方法
類型參考,包括泛型的Diamond操作符
 @SafeVarargs註解
 try-with- resources語句
新增的類庫特性,如Optional接口、java.time包,以及集合的便利工廠方法

目錄大綱

推薦序
譯者序
前言
致謝
第1章引言1 
第2章創建和銷毀對象4 
第1條:用靜態工廠方法代替構造器4 
第2條:遇到多個構造器參數時要考慮使用構建器8 
第3條:用私有構造器或者枚舉類型強化Singleton屬性13 
第4條:通過私有構造器強化不可實例化的能力15 
第5條:優先考慮依賴注入來引用資源16 
第6條:避免創建不必要的對象18 
第7條:消除過期的對象引用20 
第8條:避免使用終結方法和清除方法23 
第9條:try-with-resources優先於try-f?inally 27 
第3章對於所有對像都通用的方法30 
第10條:覆蓋equals時請遵守通用約定30 
第11條:覆蓋equals時總要覆蓋hashCode 40 
第12條:始終要覆蓋toString 44 
第13條:謹慎地覆蓋clone 46 
第14條:考慮實現Comparable接口53 
第4章類和接口59 
第15條:使類和成員的可訪問性最小化59 
第16條:要在公有類而非公有域中使用訪問方法62 
第17條:使可變性最小化64 
第18條:複合 先於繼承70
第19條:要么設計繼承並提供文檔說明,要么禁止繼承75 
第20條:接口優於抽像類79 
第21條:為後代設計接口83 
第22條:接口只用於定義類型85 
第23條:類層次優於標籤類86 
第24條:靜態成員類優於非靜態成員類88 
第25條:限制源文件為單個頂級類91 
第5章泛型93 
第26條:請不要使用原生態類型93 
第27條:消除非受檢的警告97 
第28條:列表優於數組99 
第29條:優先考慮泛型102 
第30條:優先考慮泛型方法106 
第31條:利用有限制通配符來提升API的靈活性109 
第32條:謹慎並用泛型和可變參數114 
第33條:優先考慮類型安全的異構容器118 
第6章枚舉和註解123 
第34條:用enum代替int常量123 
第35條:用實例域代替序數131 
第36條:用EnumSet代替位域132 
第37條:用EnumMap代替序數索引134 
第38條:用接口模擬可擴展的枚舉138 
第39條:註解優先於命名模式140 
第40條:堅持使用Override註解147 
第41條:用標記 口定義類型149
第7章Lambda和Stream 151 
第42條:Lambda優先於匿名類151 
第43條:方法引用優先於Lambda 154 
第44條:堅持使用標準的函數接口156 
第45條:謹慎使用Stream 159 
第46條:優先選擇Stream中無副作用的函數164 
第47條:Stream要優先用Collection作為返回類型168 
第48條:謹慎使用Stream並行172 
第8章方法176 
第49條:檢查參數的有效性176 
第50條:必要時進行保護性拷貝179 
第51條:謹慎設計方法簽名182 
第52條:慎用重載184 
第53條:慎用可變參數189 
第54條:返回零長度的數組或者集合,而不是null 190 
第55條:謹慎返回optinal 192 
第56條:為所有導出的API元素編寫文檔註釋196 
第9章通用編程202 
第57條:將局部變量的作用域最小化202 
第58條:for-each循環優先於傳統的for循環204 
第59條:了解和使用類庫207 
第60條:如果需要精確的答案,請避免使用f?loat和double 209 
第61條:基本類型優先於裝箱基本類型211
第62條:如果其他類型更適合,則盡量避免使用字符串213 
第63條:了解字符串連接的性能215 
第64條:通過接口引用對象216 
第65條:接口優先於反射機制218 
第66條:謹慎地使用本地方法220 
第67條:謹慎地進行優化221 
第68條:遵守普遍接受的命名慣例223 
第10章異常227 
第69條:只針對異常的情況才使用異常227 
第70條:對可恢復的情況使用受檢異常,對編程錯誤使用運行時異常229 
第71條:避免不必要地使用受檢異常231 
第72條:優先使用標準的異常232 
第73條:拋出與抽像對應的異常234 
第74條:每個方法拋出的所有異常都要建立文檔235 
第75條:在細節消息中包含失敗-捕獲信息237 
第76條:努力使失敗保持原子性238 
第77條:不要忽略異常239 
第11章並發241 
第78條:同步訪問共享的可變數據241 
第79條:避免過度同步245 
第80條:executor、task和stream優先於線程250 
第81條:並發工具優先於wait 和notify 251 
第82條:線程安全性的文檔化256 
第83條:慎用延遲初始化258
第84條:不要依賴於線程調度器261 
第12章序列化263 
第85條:其他方法優先於Java序列化263 
第86條:謹慎地實現Serializable接口266 
第87條:考慮使用自定義的序列化形式269 
第88條:保護性地編寫readObject方法274 
第89條:對於實例控制,枚舉類型優先於readResolve 279 
第90條:考慮用序列化代理代替序列化實例282 
附錄與第2版中條目的對應關係286 
參考文獻289