命名與格式規範
- 命名約定:類名 PascalCase、方法/變數 camelCase、常量 UPPER_SNAKE_CASE、包名全小寫
- 經典類結構:實現
equals()/hashCode()/toString()/clone()/Serializable
- 內建測試:每個類包含
main() 單元測試代碼,便於回歸驗證
- 方法精簡:單一職責,過長拆分,便於復用與測試
設計原則
- 以客戶為中心設計 API:使用直觀、變更易管理
- 類單一職責:複雜 switch → 多態;操作差異大 → 拆分類;欄位差異大 → 拆分類
- 最小可見性:默認
private,按需開放,保護封裝與線程安全
- 拒絕上帝物件:物件表達領域概念,非流程腳本容器
- 醜陋代碼封裝:不得已的 hack 置於類內部,不外洩
- 內部類改善耦合:緊密相關類考慮內部類
文檔與維護
- 詳盡 Javadoc:生成專業 API 文檔
- 消除魔術數字:語義常量替代字面值
- 構建器異常處理:創建失敗拋出異常,避免半初始化物件流出
- 顯式清理協議:
cleanup() + boolean disposed + finalize() 斷言
- 資源釋放模式:
try { init(); } finally { cleanup(); }
- finalize() 正確調用鏈:
super.finalize() 放最後
集合與類型設計
- 返回固定集合用陣列:編譯期類型檢查,免轉型
- 優先介面而非抽象類:介面定義契約,抽象類供骨架實現
- 構建器最小化:僅初始化狀態,避免調用可覆寫方法
- 物件具備行為:不只是資料容器
- 組合優於繼承:非 is-a 關係用組合
- 行為差異用繼承,狀態差異用欄位:顏色用欄位非子類
工程化守則
- 類路徑唯一性:同名類僅一份,避免編譯器誤載入
- 事件適配器拼寫陷阱:覆寫方法拼寫錯誤不報錯卻失效
- 消除偽單例:用單例模式替代「只創建一個」註釋
- 防分析癱瘓:先掌握全局再鑽細節
- 拒絕過早優化:先跑通、測量、再優化熱點
- 代碼可讀性至上:閱讀時間 ≫ 編寫時間,註釋/示例不可或缺
- 同行評審:新視角發現盲區,早發現低成本修復
- 良好設計回報最高:前期投入換取後期輕鬆與成就感
學習資源
推薦書單:《Effective Java》、《重構》、《設計模式》、《Code Complete》、《演算法導論》。線上社群:Stack Overflow、Java Specialists' Newsletter、Baeldung、InfoQ 中文站。