作 者:(美)約書亞·布洛克(Joshua Bloch) 著 俞黎敏 譯
定 價:119
出 版 社:機械工業出版社
出版日期:2019年01月01日
頁 數:312
裝 幀:平裝
ISBN:9787111612728
●推薦序
譯者序
前言
致謝
第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?inally27
第3章 對於所有對像都通用的方法30
第10條:覆蓋equals時請遵守通用約定30
第11條:覆蓋equals時總要覆蓋hashCode40
第12條:始終要覆蓋toString44
第13條:謹慎地覆蓋clone46
第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和Stream151
第42條:Lambda優先於匿名類151
第43條:方法引用優先於Lambda154
第44條:堅持使用標準的函數接口156
第45條:謹慎使用Stream159
第46條:優先選擇Stream中無副作用的函數164
第47條:Stream要優先用Collection作為返回類型168
第48條:謹慎使用Stream並行172
第8章 方法176
第49條:檢查參數的有效性176
第50條:必要時進行保護性拷貝179
第51條:謹慎設計方法簽名182
第52條:慎用重載184
第53條:慎用可變參數189
第54條:返回零長度的數組或者集合,而不是null190
第55條:謹慎返回optinal192
第56條:為所有導出的素編寫文檔注釋196
第9章 通用編程202
第57條:將局部變量的作用域最小化202
第58條:for-each循環優先於傳統的for循環204
第59條:了解和使用類庫207
第60條:如果需要準確的答案,請避免使用f?loat和double209
第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和notify251
第82條:線程安全性的文檔化256
第83條:慎用延遲初始化258
第84條:不要依賴於線程調度器261
第12章 序列化263
第85條:其他方法優先於Java序列化263
第86條:謹慎地實現Serializable接口266
第87條:考慮使用自定義的序列化形式269
第88條:保護性地編寫readObject方法274
第89條:對於實例控制,枚舉類型優先於readResolve279
第90條:考慮用序列化代理代替序列化實例282
附錄 與第2版中條目的對應關繫286
參考文獻289
本書一共包含90個條目,每個條目討論Java程序設計中的一條規則。這些規則反映了最有經驗的程序員在實踐中常用的一些有益的做法。全書以一種比較松散的方式將這些條目組織成11章,每一章都涉及軟件設計的一個主要方面。因此,本書並不一定需要按部就班地從頭讀到尾,因為每個條目都有一定程度的獨立性。這些條目相互之間經常交叉引用,因此可以很容易地在書中找到自己需要的內容。本書的目標是幫助讀者更加有效地使用Java編程語言及其基本類庫:java.lang、java.util和java.io,以及子包,如java.util.concurrent和java.util.function。本書時不時地也會討論其他的類庫。
(美)約書亞·布洛克(Joshua Bloch) 著 俞黎敏 譯
約書亞·布洛克(Joshua Bloch),是卡耐基梅隆大學的教授。他曾經是Google公司的首席Java架構師、Sun公司的傑出工程師以及Transarc公司的高級繫統設計師。Bloch曾帶領團隊設計並實現過無數的Java平臺特性;包括JDK 5.0語言增強版,並且Java集合框架上屢獲殊榮。他擁有卡耐基梅隆大學的計算機科學博士學位以及哥倫比亞大學的計算機科學學士學位。