Java從1997年誕生到日趨完善,經過了20多年不斷的發展壯大,已經擁有了近千萬開發人員。如何編寫出更清晰、更正確、更健壯且更易於重用的代碼,是大家所追求的目標。
經典Jolt獲獎作品《Effective Java》的第3版這本書,對上一版內容進行了徹底的更新,介紹了如何充分利用從泛型到枚舉、從註解到自動裝箱的各種特性,幫助讀者更加有效地使用Java程式語言及其基本類庫:java.lang. java.util和java.io,以及子包,如java.util. concurrent和java.util.function等。
本書的作者Joshua .Bloch曾經是Sun公司的傑出工程師和Google公司的首席Java架構師,帶領團隊設計和實現過無數的Java平臺特性,在本書中,他為我們帶來了90條程式設計師必備的經驗法則:針對你每天都會遇到的編程問題提出了最有效、最實用的解決方案。
對於Java 平臺精妙之處的獨到見解,並提供優秀的代碼範例。通過閱讀貫穿全書的透徹的技術剖析與完整的示例代碼,認真理解並加以實踐,必定會從中受益匪淺。書中介紹的示例代碼清晰易懂,也可以作為日常工作的參考指南。
本書分為12章共90個條目,涵蓋了Java 5.0/6.0/ 7.0/ 8.0/ 9.0的種種技術要點。
小編免費把這本書分享給大家,需要這本書來學習的朋友,請幫忙轉發,關注小編,私信「Java」就能得到這本書的免費領取方式了
第1章 引言
第2章 闡述何時以及如何創建對象,何時以及如何避免創建對象,如何確保它們能夠適時地銷毀,以及如何管理對象銷毀之前必須進行的各種清除動作。
用靜態工廠方法代替構造器遇到多個構造器參數時要考慮使用構建器用私有構造器或者枚舉類型強化Singleton屬性通過私有構造器強化不可實例化的能力優先考慮依賴注人來引用資源避免創建不必要的對象消除過期的對象引用避免使用終結方法和清除方法ty-with-resource優先於try-finally
第3章 闡述對於所有對象都通用的方法,你會從中獲知對equals, hashCode, toString,clone、finalize 以及Comparable .compareTo方法相當深入的分析,從而避免今後在這些問題上再次犯錯。
覆蓋equals時請遵守通用約定覆蓋equals時總要覆蓋hashCode始終要覆蓋toString謹慎地覆蓋clone考慮實現Comparable接口
第4章 闡述作為Java程序設計語言的核心以及Java語言的基本抽象單元(類和接口)在使用上的一些指導原則,幫助你更好地利用這些元素,設計出更加有用、健壯和靈活的類與接口。
使類和成員的可訪問性最小化要在公有類而非公有域中使用訪問方法使可變性最小化複合優先於繼承要麼設計繼承並提供文檔說明,要麼禁止繼承接口優於抽象類為後代設計接口接口只用於定義類型類層次優於標籤類靜態成員類優於非靜態成員類限制源文件為單個頂級類
第5章和第6章中 分別闡述在Java1.5發行版本中新增加的泛型(Generic)以及枚舉( Enum)和註解( Annotation)的最佳實踐,教你如何最大限度地享有這些優勢,並使整個過程儘可能地簡單化。
請不要使用原生態類型消除非受檢的警告列表優於數組優先考慮泛型優先考慮泛型方法利用有限制通配符來提升API的靈活性謹慎並用泛型和可變參數優先考慮類型安全的異構容器
用enum代替int常量用實例域代替序數用EnumSet代替位域用EnumMap代替序數索引用接口模擬可擴展的枚舉註解優先於命名模式堅持使用Override註解用標記接口定義類型
第7章 專門討論在Java 8中新增的函數接口( Functional Interface). Lambda 表達式和方法引用( Method Reference),使創建函數對象( Function Object)變得更加容易。接著探討為處理數據元素的序列提供了類庫級別支持的Stream API,以及如何最佳地利用這些機制。
Lambda優先於匿名類方法引用優先於Lambda堅持使用標準的函數接口謹慎使用Stream優先選擇Stream中無副作用的函數Stream要優先用Collection作為返回類型謹慎使用Stream並行
需要的朋友請幫忙轉發,關注小編,私信「Java」,就能得到本文檔的免費領取方式了哦
第8章 討論方法設計的幾個方面:如何處理參數和返回值,如何設計方法籤名,如何為方法編寫文檔,從而使方法設計在可用性、健壯性和靈活性上有進一步的提升。
檢查參數的有效性必要時進行保護性拷貝謹慎設計方法籤名慎用重載慎用可變參數返回零長度的數組或者集合而不是null謹慎返回optinal為所有導出的API元素編寫文檔注釋
第9章 主要討論Java語言的具體細節,討論了局部變量的處理、控制結構、類庫的使用、各種數據類型的用法,以及兩種不是由語言本身提供的機制(Reflection和NativeMethod,反射機制和本地方法)的用法,並討論了優化和命名慣例。
將局部變量的作用域最小化for-each循環優先於傳統的for循環了解和使用類庫如果需要精確的答案,請避免使用float和double基本類型優先於裝箱基本類型如果其他類型更適合,則儘量避免使用字符串了解字符串連接的性能通過接口引用對象接口優先於反射機制謹慎地使用本地方法謹慎地進行優化遵守普遍接受的命名慣例
第10章 闡述如何充分發揮異常的優點來提高程序的可讀性、可靠性和可維護性,以及減少異常使用不當所帶來的負面影響,並提供了一些關於有效使用異常的指導原則。
只針對異常的情況才使用異常對可恢復的情況使用受檢異常,對編程錯誤使用運行時異常避免不必要地使用受檢異常優先使用標準的異常拋出與抽象對應的異常每個方法拋出的所有異常都要建立文檔在細節消息中包含失敗捕獲信息努力使失敗保持原子性不要忽略異常
第11章 闡述如何幫助你編寫出清晰、正確、文檔組織良好的並發程序,比如如何避免過度同步,優先採用Executor Framework.並發集合(ConcurrentCollection)、同步器(Synch-ronizer),以及是否需要依賴於線程調度器等。
同步訪問共享的可變數據避免過度同步executor、task 和stream優先於線程並發工具優先於wait和線程安全性的文檔化慎用延遲初始化不要依賴於線程調度器
獲取方式
第12章 闡述序列化方面的技術,並且有一項值得特別提及的特性,就是序列化代理( Serialization Proxy)模式,它可以幫助你避免對象序列化的許多缺陷。
其他方法優先於Java序列化謹慎地實現Serializable接口考慮使用自定義的序列化形式保護性地編寫readObject方法對於實例控制,枚舉類型優先於readResolve考慮用序列化代理代替序列化實例
由於篇幅限制,小編只能在這裡給大家展示文章目錄及部分內容,以避免影響大家的閱讀體驗
最後,預祝大家都能進大廠哦!