優秀 Java 程序員的代碼不僅能跑通,更要可讀、可維護、可擴展。本文整理 30 條核心規範,涵蓋命名慣例、類設計、方法原則、異常處理、性能意識、團隊協作等維度。
命名與格式 (1-3)
- 類名 PascalCase,字段/方法/變量 camelCase,常量全大寫下劃線分隔
- 包名全小寫,多級域名反轉(
com.company.project.module)
- 每個類提供
main() 測試入口,代碼即文檔,便於回歸驗證
類與方法設計 (4-10)
- 單一職責:類只解決一個問題,方法只做一件事,過長拆分
- 經典類模板:實現
equals/hashCode/toString、Cloneable、Serializable
- 面向接口編程:優先
interface,次選 abstract class,接口定義「做什麼」,類實現「怎麼做」
- 組合優於繼承:新建/委派優先,只有 is-a 關係才繼承
- 行為差異用多態,狀態差異用字段(如顏色用 enum/字段,非子類)
- 最小權限原則:默認
private,按需放寬,保護封裝性與線程安全
- 避免上帝類:拒絕巨大對象綜合症,領域模型拆分
- 醜陋代碼內聚:不得已的 hack 封裝在類內部,不污染公共 API
- 內部類適度使用:緊耦合邏輯用內部類改善封裝
- 構造器只做初始化:不調用可覆蓋方法,避免構造期多態風險
異常與資源管理 (11-16)
- 異常轉換:構造器失敗拋出運行時異常,調用者不會誤以為對象創建成功
- 顯式清理:提供
cleanup(),finalize() 做安全網(驗證是否清理)
- try-finally 確保釋放:資源獲取即進入 try,finally 中關閉
- finalize 調用鏈:覆寫時最後調用
super.finalize()
- 固定集合返回數組:編譯期類型檢查,調用者免轉型
- 魔術數字常量化:
private static final int MAX_RETRY = 3; 而非裸露 3
註釋與文檔 (17)
- Javadoc 覆蓋公共 API:類、方法、參數、返回值、異常、示例,生成文檔站點
性能與優化 (18-19)
- 拒絕過早優化:先正確、再優化,Profiler 定位瓶頸,否則在浪費時間
- 可讀性優先:代碼被讀次數 ≫ 寫次數,清晰設計 > 微優化
團隊與工程素養 (20-30)
- 類路徑唯一性:同名類僅一份,避免編譯器誤載入
- 事件適配器陷阱:匿名類覆寫方法拼寫錯誤不會報錯,需 @Override 保護
- 單例模式規範:雙重檢查鎖 + volatile 或枚舉實現
- 全局視角分析:先懂整體再看細節,防陷「死邏輯」
- 代碼評審文化:邀請外部視角審查,發現熟視無睹的問題
- 良好設計回報最高:前期投入設計,後期收獲指數級收益
- 持續重構:小步重構,測試保護,保持代碼健康度
- 測試驅動:TDD 循環:紅-綠-重構,測試即活文檔
- 構建自動化:Maven/Gradle 一鍵構建、測試、部署
- 版本控制規範:Git Flow / Trunk Based Development,提交信息規範化
速查卡
| 維度 | 核心原則 | 工具輔助 |
| 命名 | 見名知意、統一風格 | Checkstyle, SonarLint |
| 設計 | SOLID、設計模式 | ArchUnit, Dependency Analyzer |
| 異常 | 失敗快速、信息豐富 | SpotBugs, Error Prone |
| 性能 | 測量優先、避免過早 | JProfiler, Async Profiler |
| 協作 | 小步提交、代碼評審 | GitHub PR, GitLab MR |