從本章開始,後續啟動 《Java高效編程 第三版(Effective Java 3rd)》各章節的核心技術要點。
關注頭條號“編程家園”,後續陸續會有更多技術領域(包括並不限於Android進階、Kotlin、網絡、Flutter、Python等),以及架構、職業規劃、職業思考等方面資料的免費分享,期待您的關注!
最新大綱如下:
Chapter 2. Creating and Destroying Objects
- 01. 考慮使用靜態工廠方法替代構造方法
- 02. 當構造方法參數過多時使用builder模式
- 03. 使用私有構造方法或枚類實現Singleton屬性
- 04. 使用私有構造方法執行非實例化
- 05. 依賴注入優於硬連接資源(hardwiring resources)
- 06. 避免創建不必要的對象
- 07. 消除過期的對象引用
- 08. 避免使用Finalizer和Cleaner機制
- 09. 使用try-with-resources語句替代try-finally語句
Chapter 3. Methods Common to All Objects
- 10. 重寫equals方法時遵守通用約定
- 11. 重寫equals方法時同時也要重寫hashcode方法
- 12. 始終重寫 toString 方法
- 13. 謹慎地重寫 clone 方法
- 14. 考慮實現Comparable接口
Chapter 4. Classes and Interfaces
- 15. 使類和成員的可訪問性最小化
- 16. 在公共類中使用訪問方法而不是公共屬性
- 17. 最小化可變性
- 18. 組合優於繼承
- 19. 要麼設計繼承並提供文檔說明,要麼禁用繼承
- 20. 接口優於抽象類
- 21. 為後代設計接口
- 22. 接口僅用來定義類型
- 23. 類層次結構優於標籤類
- 24. 支持使用靜態成員類而不是非靜態類
- 25. 將源文件限制為單個頂級類
Chapter 5. Generics
- 26. 不要使用原始類型
- 27. 消除非檢查警告
- 28. 列表優於數組
- 29. 優先考慮泛型
- 30. 優先使用泛型方法
- 31. 使用限定通配符來增加API的靈活性
- 32. 合理地結合泛型和可變參數
- 33. 優先考慮類型安全的異構容器
Chapter 6. Enums and Annotations
- 34. 使用枚舉類型替代整型常量
- 35. 使用實例屬性替代序數
- 36. 使用EnumSet替代位屬性
- 37. 使用EnumMap替代序數索引
- 38. 使用接口模擬可擴展的枚舉
- 39. 註解優於命名模式
- 40. 始終使用Override註解
- 41. 使用標記接口定義類型
Chapter 7. Lambdas and Streams
- 42. lambda表達式優於匿名類
- 43. 方法引用優於lambda表達式
- 44. 優先使用標準的函數式接口
- 45. 明智審慎地使用Stream
- 46. 優先考慮流中無副作用的函數
- 47. 優先使用Collection而不是Stream來作為方法的返回類型
- 48. 謹慎使用流並行
Chapter 8. Methods
- 49. 檢查參數有效性
- 50. 必要時進行防禦性拷貝
- 51. 仔細設計方法簽名
- 52. 明智審慎地使用重載
- 53. 明智審慎地使用可變參數
- 54. 返回空的數組或集合,不要返回 null
- 55. 明智審慎地返回 Optional
- 56. 為所有已公開的 API 元素編寫文檔註釋
Chapter 9. General Programming
- 57. 最小化局部變量的作用域
- 58. for-each 循環優於傳統 for 循環
- 59. 瞭解並使用庫
- 60. 若需要精確答案就應避免使用 float 和 double 類型
- 61. 基本數據類型優於包裝類
- 62. 當使用其他類型更合適時應避免使用字符串
- 63. 當心字符串連接引起的性能問題
- 64. 通過接口引用對象
- 65. 接口優於反射
- 66. 明智審慎地本地方法
- 67. 明智審慎地進行優化
- 68. 遵守被廣泛認可的命名約定
Chapter 10. Exceptions
- 69. 只針對異常的情況下才使用異常
- 70. 對可恢復的情況使用受檢異常,對編程錯誤使用運行時異常
- 71. 避免不必要的使用受檢異常
- 72. 優先使用標準的異常
- 73. 拋出與抽象對應的異常
- 74. 每個方法拋出的異常都需要創建文檔
- 75. 在細節消息中包含失敗一捕獲信息
- 76. 保持失敗原子性
- 77. 不要忽略異常
Chapter 11. Concurrency
- 78. 同步訪問共享的可變數據
- 79. 避免過度同步
- 80. executor 、task 和 stream 優先於線程
- 81. 併發工具優於 wait 和 notify
- 82. 文檔應包含線程安全屬性
- 83. 明智審慎的使用延遲初始化
- 84. 不要依賴線程調度器
Chapter 12. Serialization
- 85. 優先選擇 Java 序列化的替代方案
- 86. 非常謹慎地實現 Serializable
- 87. 考慮使用自定義的序列化形式
- 88. 保護性的編寫 readObject 方法
- 89. 對於實例控制,枚舉類型優於 readResolve
- 90. 考慮用序列化代理代替序列化實例
![Effective Java 3rd(Java高效編程)技術要點](http://p2.ttnews.xyz/loading.gif)
閱讀更多 編程家園 的文章