Effective Java目錄

建立和銷燬對象

  1. 考慮用靜態工廠方法代替構造器
  2. 遇到多個構造器參數時要考慮用構建器
  3. 用私有構造器或者枚舉類型強化Singleton屬性
  4. 經過私有構造器強化不可實例化能力
  5. 避免建立沒必要要的對象
  6. 消除過時的對象引用
  7. 避免使用終結方法finalizer

對於全部對象都通用的方法

  1. 覆蓋equals時請遵照通用約定
  2. 覆蓋equals時總要覆蓋hashCode
  3. 始終要覆蓋toString
  4. 謹慎地覆蓋clone
  5. 考慮實現Comparable接口

類和接口

  1. 使類和成員的可訪問性最小化
  2. 在公有類中使用訪問方法而非公有域
  3. 使可變性最小化
  4. 符合優先於繼承
  5. 要麼爲繼承而設計,並提供文檔說明,要麼禁止繼承
  6. 接口優於抽象類
  7. 接口只用於定義類型
  8. 類層次優於標籤類
  9. 用函數對象表示策略
  10. 優先考慮靜態成員類

泛型

  1. 請不要在新代碼中使用原生態類型(Object、Collection等等,通常使用泛型代替)
  2. 消除非受檢警告
  3. 列表優於數組
  4. 優先考慮泛型
  5. 優先考慮泛型方法
  6. 利用有限制通配符來提高API的靈活性
  7. 優先考慮類型安全的易購容器

枚舉和註解

  1. 用enum代替int常量
  2. 用實例域代替序數
  3. 用EnumSet代替位域
  4. 用EnumMap代替序數索引
  5. 用接口模擬可伸縮的枚舉
  6. 註解優先於命名模式
  7. 堅持使用Override註解
  8. 用標記接口定義類型

方法

  1. 檢查參數的有效性
  2. 必要時進行保護性拷貝
  3. 謹慎設計方法簽名
  4. 慎用重載
  5. 慎用可變參數
  6. 返回零長度的數組或者集合,而不是null
  7. 爲全部導出的API編寫文檔註釋

通用程序設計

  1. 將局部變量的做用域最小化
  2. for-each循環優先於傳統的for循環(若是有remove不用for-each)
  3. 瞭解和使用類庫
  4. 若是須要精確的答案,請避免使用float和double
  5. 基本類型優先於裝箱基本類型
  6. 若是其餘類型更合適,則儘可能避免使用字符串
  7. 小心字符串連接的性能
  8. 經過接口引用對象
  9. 接口優先於反射機制
  10. 謹慎地使用本地方法
  11. 謹慎地進行優化
  12. 遵照廣泛接受的命名慣例

異常

  1. 只針對異常的狀況才使用異常
  2. 對可恢復的狀況使用受檢異常,對編程錯誤使用運行時異常
  3. 避免沒必要要地使用受檢異常
  4. 優先使用標準的異常
  5. 拋出與抽象相應的異常
  6. 每一個方法拋出的異常都要有文檔
  7. 在細節消息中包含能補貨失敗的信息
  8. 努力使失敗保持原子性
  9. 不要忽略異常

併發

  1. 同步訪問共享的可變數據
  2. 避免過分同步
  3. executor和task優先於線程
  4. 併發工具優先於wait和notify
  5. 線程安全性的文檔化
  6. 慎用延遲初始化
  7. 不要依賴於線程調度器
  8. 避免使用線程組

序列化

  1. 謹慎地實現Serializable接口
  2. 考慮使用自定義的序列化形式
  3. 保護性地編寫readObject方法
  4. 對於實例控制,枚舉類型優先於readResolve
  5. 考慮用序列化代理序列化實例
相關文章
相關標籤/搜索