阿里內部學習指南《Effective Java中文 第3版》程序員進階必備

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 平臺精妙之處的獨到見解,並提供優秀的代碼範例。通過閱讀貫穿全書的透徹的技術剖析與完整的示例代碼,認真理解並加以實踐,必定會從中受益匪淺。書中介紹的示例代碼清晰易懂,也可以作爲日常工作的參考指南

本文檔會免費分享給大家,需要獲取學習的朋友,請幫忙分享,私信“Java”就能獲得領取方式哦

本書分爲12章共90個條目,涵蓋了Java 5.0/6.0/ 7.0/ 8.0/ 9.0的種種技術要點。

第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
  • 考慮用序列化代理代替序列化實例

本文檔會免費分享給大家,需要獲取學習的朋友,請幫忙分享,私信“Java”就能獲得領取方式哦

由於篇幅限制,小編只能在這裏給大家展示文章目錄及部分內容,以避免影響大家的閱讀體

最後,希望大家都可以進大廠

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章