Effective Java 第三版 中文翻译
effective-java-third-edition
介紹
Effective Java 第三版全文翻譯,純屬個人業余翻譯,不合理的地方,望指正,感激不盡!(OS:如果可以的話,給個Star唄!)
郵箱:lin-mt@outlook.com
目錄
推薦序
前言
致謝
第一章 引言
第二章 創建和銷毀對象
??本章涉及創建和銷毀對象,包括何時以及如何創建它們,何時以及如何避免創建它們,如何確保它們被及時銷毀,以及如何管理在銷毀之前必須進行的清理操作。
- 第1項:考慮靜態工廠方法而不是構造函數
- 第2項:當面臨多個參數的構造器時考慮使用構建器
- 第3項:用私有構造器或者枚舉類型強化Singleton屬性
- 第4項:通過私有構造器強化不可實例化的能力
- 第5項:優先考慮依賴注入來引用資源
- 第6項:避免創建不必要的對象
- 第7項:消除過期的對象引用
- 第8項:避免使用終結方法和清除方法
- 第9項:try-with-resources優先于try-finally
第三章 對于所有對象都通用的方法
??盡管Object是一個具體類,但是設計它主要是為了擴展。它所有的非final方法(equals、hashCode、toString、clone和finalize)都有明確的通用約定(general contracts),因為它們被設計成是要被重寫(override)的。任何一個類,它在覆蓋這些方法的時候,都有責任遵守這些通用約定;如果做不到這一點,其他依賴于這些約定的類(例如HashMap和HashSet)就無法結合該類一起正常運作。
??本章將講述何時以及如何覆蓋這些非final的Object方法。本章不再討論finalize方法,因為第7項已經討論過這個方法了。而Comparable.compareTo雖然不是Object方法,但是本章也對它進行討論,因為它具有類似的特征。
- 第10項:覆蓋equals時請遵守通用約定
- 第11項:當重寫equals方法時總要重寫hashCode方法
- 第12項:始終重寫toString方法
- 第13項:謹慎地重寫clone方法
- 第14項:考慮實現Comparable接口
第四章 類和接口
??類和接口是Java程序設計語言的何鑫,他們也是Java語言的基本抽象單元。Java語言提供了許多強大的基本元素,供程序猿來設計類和接口。本章包含的一些指南可以幫助你充分利用這些元素,以便讓你編寫的類和接口可用、健壯且靈活。
- 第15項:使類和成員的可訪問性最小化
- 第16項:要在公有類而非公有域中使用訪問方法
- 第17項:使可變性最小化
- 第18項:復合優先于繼承
- 第19項:要么設計繼承并提供文檔說明,要么禁止繼承
- 第20項:接口優于抽象類
- 第21項:為后代設計接口
- 第22項:接口只用于定義類型
- 第23項:類層次優于標簽類
- 第24項:靜態成員類優于非靜態成員類
- 第25項:限制源文件為單個頂級類
第五章 泛型
??Java 1.5發行版本中增加了泛型(Generic)。在沒有泛型之前,從集合中讀取到的每一個對象都必須進行轉換。如果有人不小心插入了類型錯誤的對象,在運行時的轉換處理就會出錯。有個泛型,可以告訴編譯器每個集合中接收哪些對象類型。編譯器自動地為你的插入進行轉化,并在編譯時告知是否插入了類型錯誤的對象。這樣可以使程序既更加安全,也更加清楚,但是這些好處(不僅僅針對集合)是需要付出代價的。本章將告訴您如何最大化利益并最大限度地減少并發癥【使用泛型帶來的壞處】(complications)。
- 第26項:請不要使用原生態類型
- 第27項:消除非受檢的警告
- 第28項:列表優于數組
- 第29項:優先考慮泛型
- 第30項:優先考慮泛型方法
- 第31項:利用有限制通配符來提升API的靈活性
- 第32項:謹慎并用泛型和可變參數
- 第33項:優先考慮類型安全的異構容器
第六章 枚舉和注解
??Java支持兩種特殊用途的引用類型:一種成為枚舉(enum type)類型,以及一種稱為注解類型(annotation type)的接口。本章討論使用這些類型系列的最佳實踐。
- 第34項:用enum代替int常量
- 第35項:用實例域代替序數
- 第36項:用EnumSet代替位域
- 第37項:用EnumMap代替序數索引
- 第38項:用接口模擬可擴展的枚舉
- 第39項:注解優先于命名模式
- 第40項:堅持使用Override注解
- 第41項:用標記接口定義類型
第七章 Lambda和Stream
??在Java 8中,添加了函數接口,lambda和方法引用,以便更容易地創建函數對象。在這些語法(language)更改的同時添加進了流API,以便為處理數據元素序列提供庫支持。在本章中,我們將討論如何充分利用這些工具。
- 第42項:Lambda優先于匿名類
- 第43項:方法引用優先于Lambda
- 第44項:堅持使用標準的函數接口
- 第45項:謹慎使用Stream
- 第46項:優先選擇Stream中無副作用的函數
- 第47項:Stream要優先用Collection作為返回類型
- 第48項:謹慎使用Stream并行
第八章 方法
??本章討論了方法設計的幾個方面:如何處理參數和返回值,如何設計方法簽名以及如何為方法編寫文檔。本章中的大部分內容適用于構造函數和方法。 與第4章一樣,本章重點介紹可用性,健壯性和靈活性。
- 第49項:檢查參數的有效性
- 第50項:必要時進行保護性拷貝
- 第51項:謹慎設計方法簽名
- 第52項:慎用重載
- 第53項:慎用可變參數
- 第54項:返回零長度的數組或者集合,而不是null
- 第55項:謹慎返回optinal
- 第56項:為所有導出的API元素編寫文檔注釋
第九章 通用編程
??本章主要討論Java語言的具體細節,討論了局部變量、控制結構、類庫、數據類型,以及兩種不是由語言本身提供的機制(reflection和native method,反射機制和本地方法)。最后討論了優化和命名慣例。
- 第57項:將局部變量的作用域最小化
- 第58項:for-each循環優先于傳統的for循環
- 第59項:了解和使用類庫
- 第60項:如果需要精確的答案,請避免使用float和double
- 第61項:基本類型優先于裝箱基本類型
- 第62項:如果其他類型更適合,則盡量避免使用字符串
- 第63項:了解字符串連接的性能
- 第64項:通過接口引用對象
- 第65項:接口優先于反射機制
- 第66項:謹慎地使用本地方法
- 第67項:謹慎地進行優化
- 第68項:遵守普遍接受的命名慣例
第十章 異常
??在最通常情況下,異常可以提高程序的可讀性,可靠性和可維護性。如果使用不當,可能會產生相反的效果。本章提供有效使用異常的指南。
- 第69項:只針對異常的情況才使用異常
- 第70項:對可恢復的情況使用受檢異常,對編程錯誤使用運行時異常
- 第71項:避免不必要地使用受檢異常
- 第72項:優先使用標準的異常
- 第73項:拋出與抽象對應的異常
- 第74項:每個方法拋出的所有異常都要建立文檔
- 第75項:在細節消息中包含失敗-捕獲信息
- 第76項:努力使失敗保持原子性
- 第77項:不要忽略異常
第十一章 并發
??線程(RHREADS)機制允許同時進行多個活動。并發編程要比單線程編程要困難得多,因為有很多東西可能出錯,也很難重現失敗。你無法避免并發。它本來就存在Java平臺中了,如果你要從多核處理器中獲得更好的性能,并發也是一個必要條件,這些現在都是十分普遍的了。本章闡述的建議可以幫助你編寫出清晰、正確、文檔組織良好的并發程序。
- 第78項:同步訪問共享的可變數據
- 第79項:避免過度同步
- 第80項:executor、task和stream優先于線程
- 第81項:并發工具優先于wait和notify
- 第82項:線程安全性的文檔化
- 第83項:慎用延遲初始化
- 第84項:不要依賴于線程調度器
第十二章 序列化
??本章關注對象序列化(object serialization) ,它是一個Java的框架,用來將對象編碼為字節流(序列化(serializing)),并從其編碼中重構對象(反序列化(deserializing))。一旦對象被序列化,其編碼可以從一個VM發送到另一個VM或存儲在磁盤上以便以后反序列化。本章重點介紹序列化的危險以及如何將序列化最小化。
- 第85項:其他方法優先于Java序列化
- 第86項:謹慎地實現Serializable接口
- 第87項:考慮使用自定義的序列化形式
- 第88項:保護性地編寫readObject方法
- 第89項:對于實例控制,枚舉類型優先于readResolve
- 第90項:考慮用序列化代理代替序列化實例
總結
以上是生活随笔為你收集整理的Effective Java 第三版 中文翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2048游戏作者:2048的成功和我
- 下一篇: Java对接百度翻译API