- 第1項:用靜態工廠方法代替構造器
- 第2項:遇到多個構造器參數時要考慮使用構建器
- 第3項:用私有構造器或者枚舉類型強化Singleton屬性
- 第4項:經過私有構造器強化不可實例化的能力
- 第5項:優先考慮依賴注入來引用資源
- 第6項:避免建立沒必要要的對象
- 第7項:消除過時的對象引用
- [第8項:避免使用終結方法和清除方法]()
- [第9項:try-with-resources優先於try-finally]()
- 第10項:覆蓋equals時請遵照通用約定
- 第11項:覆蓋equals時總要覆蓋hashCode
- 第12項:始終要覆蓋toString
- 第13項:謹慎地覆蓋clone
- 第14項:考慮實現Comparable接口
- 第15項:使類和成員的可訪問性最小化
- 第16項:要在公有類而非公有域中使用訪問方法
- 第17項:使可變性最小化
- 第18項:複合優先於繼承
- 第19項:要麼設計繼承並提供文檔說明,要麼禁止繼承
- 第20項:接口優於抽象類
- 第21項:爲後代設計接口
- 第22項:接口只用於定義類型
- 第23項:類層次優於標籤類
- 第24項:靜態成員類優於非靜態成員類
- 第25項:限制源文件爲單個頂級類
- 第26項:請不要使用原生態類型
- 第27項:消除非受檢的警告
- 第28項:列表優於數組
- 第29項:優先考慮泛型
- 第30項:優先考慮泛型方法
- 第31項:利用有限制通配符來提高API的靈活性
- 第32項:謹慎並用泛型和可變參數
- 第33項:優先考慮類型安全的異構容器
- 第34項:用enum代替int常量
- 第35項:用實例域代替序數
- 第36項:用EnumSet代替位域
- 第37項:用EnumMap代替序數索引
- 第38項:用接口模擬可擴展的枚舉
- 第39項:註解優先於命名模式
- 第40項:堅持使用Override註解
- 第41項:用標記接口定義類型
- 第42項:Lambda優先於匿名類
- 第43項:方法引用優先於Lambda
- 第44項:堅持使用標準的函數接口
- 第45項:謹慎使用Stream
- 第46項:優先選擇Stream中無反作用的函數
- 第47項:Stream要優先用Collection做爲返回類型
- 第48項:謹慎使用Stream並行
- 第49項:檢查參數的有效性
- 第50項:必要時進行保護性拷貝
- 第51項:謹慎設計方法簽名
- 第52項:慎用重載
- 第53項:慎用可變參數
- 第54項:返回零長度的數組或者集合,而不是null
- 第55項:謹慎返回optinal
- 第56項:爲全部導出的API元素編寫文檔註釋
- 第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項:不要忽略異常
- 第78項:同步訪問共享的可變數據
- 第79項:避免過分同步
- 第80項:executor、task和stream優先於線程
- 第81項:併發工具優先於wait和notify
- 第82項:線程安全性的文檔化
- 第83項:慎用延遲初始化
- 第84項:不要依賴於線程調度器
- 第85項:其餘方法優先於Java序列化
- 第86項:謹慎地實現Serializable接口
- 第87項:考慮使用自定義的序列化形式
- 第88項:保護性地編寫readObject方法
- 第89項:對於實例控制,枚舉類型優先於readResolve
- 第90項:考慮用序列化代理代替序列化實例
關注公衆號獲取同步更新編程