2010/01/12

[轉]Effective Java Tip 整理

創建和銷毀物件(Creating and Destroying Objects)
條款1 : 考慮以 "static factory methods" 取代建構式
條款2 : 以 private 建構式厲行 singleton (單件)性質
條款3 : 以 private 建構式厲行不可實體化性質 (noninstantiability)
條款4 : 避免創建「重複物件」 (duplicate objects)
條款5 : 消除老舊的(逾期的) object references
條款6 : 避免使用 finalizers (終結式)

通用於所有物件的函式(Methods Common to All Objects)
條款7 : 覆寫 equals() 時請遵守通用契約 (general contract)
條款8 : 覆寫 equals() 時請總是一並覆寫 hashCode()
條款9 : 總是覆寫 toString()
條款10 : 審慎地覆寫 clone()
條款11 : 考慮實現 Comparable

類別和介面(Classes and Interfaces)
條款12 : 將 classes 和 members 的可存取性 (accessibility) 最小化
條款13 : 偏愛不變性 (immutability)
條款14 : 優先考慮複合 (composition) 然後才是繼承 (inheritance)
條款15 : 除非專為繼承而設計並提供文件, 否則不要使用繼承
條款16 : 盡量以 interfaces (介面) 取代 abstract classes (抽象類別)
條款17 : interfaces 只應當被用來定義型別 (types)
條款18 : 優先考慮 static member classes, 然後才是 nonstatic



C 構件的替代品(Substitutes for C Constructs)
條款19 : 以 classes 替代 structures
條款20 : 以 class 繼承體系 (hierarchy) 取代 unions
條款21 : 以 classes 替代 enums
條款22 : 以 classes 和 interfaces 替代函式指標 (function pointers)

函式(Methods)
條款23 : 檢查參數的有效性 (validity)
條款24 : 必要時製作出「保護性拷貝」(defensive copy)
條款25 : 謹慎設計函式的署名 (簽名, signatures)
條款26 : 審慎運用「重載」(overloading)
條款27 : 寧願傳回長度為0的array, 不要傳回 nulls
條款28 : 為所有 exposed API 撰寫文件註釋

一般編程標準(General Programming)
條款29 : 將區域變數的作用域 (scope) 最小化
條款30 : 熟悉並善用程式庫 (libraries)
條款31 : 如需精確的運算結果, 請勿使用 float 和 double
條款32 : 如果其他型別更適合, 就不要使用字串 (strings)
條款33 : 注意字串接合 (string concatenation) 的效率
條款34 : 透過 interfaces 使用物件
條款35 : 優先使用 interfaces, 然後才考慮 reflection

條款36 : 審慎運用 native 函式
條款37 : 審慎進行最佳化 (Optimize)
條款38 : 遵守普遍的命名習慣 (naming conventions)

異常(Exceptions)
條款39 : 只在異常情況下才使用異常機制 (Exceptions)
條款40 : 對可復狀態 (recoverable conditions) 使用可控式異常 (checked exceptions
), 對編程錯誤使用執行期異常 (runtime exceptions)
條款41 : 不要濫用可控式異常 (checked exceptions)
條款42 : 盡量使用標準異常 (standard exceptions)
條款43 : 拋出與其抽象性相應的異常
條款44 : 對每一個函式所拋出的每一個異常詳加說明
條款45 : 以詳細的訊息紀錄失敗情況下所捕獲的資訊
條款46 : 努力保持 failure atomicity (失敗之極微性)
條款47 : 不要輕忽異常 (exceptions)

執行緒(Threads)
條款48 : 同步存取共享之可變資料 (shared mutable data)
條款49 : 避免過度使用同步機制 (synchronization)
條款50 : 絕對不要在迴圈外喚起 wait()
條款51 : 不要倚賴執行緒排程器 (thread schedular)
條款52 : 以文件說明你的「多緒安全性」 (thread safety)
條款53 : 避免使用執行緒群組 (thread groups)


序列化/次第讀寫(Serialization)
條款54 : 審慎實現 Serializable
條款55 : 考慮使用自訂的序列化格式 (serialized form)
條款56 : 保護性(防衛性)地寫一個 readObject()
條款57 : 必要時提供一個 readResolve()

轉自高師大人民工舍(bbs://ite.twbbs.org)Ite_program版

No comments:

Post a Comment