首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 開發者必遵循的 10 大鐵律

     編輯:Java 相關知識

資深 Java 開發者的 10 條核心準則

代碼品質決定專案成敗。這 10 條鐵律源自無數血淚教訓,能助你寫出更專業、可維護、高效能的 Java 代碼。


1. 為代碼添加有意義的註解

「代碼告訴你『怎麼做』,註解告訴你『為什麼做』。」

// ❌ 無用註解
i++; // i 加 1

// ✅ 好註解:解釋業務邏輯、非顯而易見的決策、TODO
/**
 * 計算動態折扣率。
 * 規則:VIP 客戶滿 1000 元打 9 折,普通客戶滿 2000 元打 95 折。
 * 參考:營運部 2023-Q3 促銷方案 v2.1
 */
public BigDecimal calculateDiscount(Customer customer, BigDecimal amount) {
    // VIP 邏輯...
}

必須加註解的場景

  • 公共 API (Javadoc)
  • 複雜演算法/業務規則
  • 非標準做法的理由
  • 已知缺陷/暫時性方案 (// TODO, // FIXME)
  • 外部依賴的特殊約束

2. 不要把簡單問題複雜化

「簡單是可靠的前提。」—— Edsger Dijkstra

❌ 過度設計範例

  • 5 使用者的系統引入 EJB、微服務、事件溯源
  • 單一職責類別拆成 5 層抽象
  • 為了「未來可能擴充」引入複雜框架
  • 單執行緒場景硬上 CompletableFuture

✅ 原則

  • YAGNI (You Aren't Gonna Need It) — 不要實作不需要的功能
  • KISS (Keep It Simple, Stupid) — 保持簡單
  • 先解決當前問題,再重構應對未來變化
  • 向資深工程師請教架構決策

3. 「少即是多」不總是對的:可讀性優於極簡

// ❌ 極簡但難讀:單行複雜條件
if(newStatusCode.equals("SD") && (sellOffDate == null || todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null && todayDate.compareTo(lastUsedDate)>0)) || (newStatusCode.equals("OBS") && (OBSDate == null || todayDate.compareTo(OBSDate)<0))){ newStatusCode = "NYP"; }

// ✅ 清晰易讀:拆解條件、命名中間變數
boolean isSellOffValid = sellOffDate == null || todayDate.isBefore(sellOffDate);
boolean isLastUsedValid = lastUsedDate == null || todayDate.isAfter(lastUsedDate);
boolean isSDCase = "SD".equals(newStatusCode) && (isSellOffValid || isLastUsedValid);

boolean isOBSDateValid = OBSDate == null || todayDate.isBefore(OBSDate);
boolean isOBSCase = "OBS".equals(newStatusCode) && isOBSDateValid;

if (isSDCase || isOBSCase) {
    newStatusCode = "NYP";
}

代價極小、收益極大

  • 多寫幾行、幾個括號
  • 換來:除錯易、重構安心、新人秒懂

4. 拒絕硬編碼

// ❌ 硬編碼:到處散落魔術字串/數字
if (status == 1) { ... }
if ("ACTIVE".equals(type)) { ... }
timeout = 30000;

// ✅ 常數集中管理
public class OrderConstants {
    public static final int STATUS_NEW = 1;
    public static final int STATUS_PAID = 2;
    public static final String TYPE_ACTIVE = "ACTIVE";
    public static final int DEFAULT_TIMEOUT_MS = 30_000;
}

// 使用
if (status == OrderConstants.STATUS_NEW) { ... }
timeout = OrderConstants.DEFAULT_TIMEOUT_MS;

優勢

  • 單點修改,全域生效
  • IDE 重構支援 (重命名、查找引用)
  • 編譯期檢查拼字錯誤
  • 語義自文檔化

5. 不要重複造輪子:善用成熟框架

領域推薦方案避免自造
Web 框架Spring Boot, Quarkus, Micronaut自寫 MVC、路由、DI 容器
ORMJPA/Hibernate, MyBatis, jOOQ手寫 JDBC 封裝、SQL 建構器
序列化Jackson, Gson, Protobuf手寫 JSON 解析
日誌SLF4J + Logback/Log4j2System.out.println
測試JUnit 5, Mockito, Testcontainers自寫斷言、Mock 框架
工具類Apache Commons, Guava, Hutool重複造 StringUtils、CollectionUtils

但記住第 2 條:簡單專案 (3 個頁面) 不需要 Spring Boot,JSP/Servlet 或 SparkJava 即可。


6. 拒絕 System.out.println 與字串拼接濫用

效能災難實測

// 10,000 次迴圈
// System.out.println: ~10,520 ms
// 無輸出: ~1.2 ms
// 差距:8,700 倍!

正確日誌實踐

@Slf4j  // Lombok 自動生成 private static final Logger log
public class OrderService {
    public void process(Order order) {
        log.info("開始處理訂單: id={}, amount={}", order.getId(), order.getAmount());
        
        if (log.isDebugEnabled()) {  // 避免字串拼接開銷
            log.debug("訂單明細: {}", order.getItems()); // 只有 DEBUG 級別才拼接
        }
        
        // 業務邏輯...
    }
}

字串拼接優化

// ❌ 迴圈中拼接:O(n²) 建立大量中間物件
String result = "";
for (String s : list) result += s;

// ✅ StringBuilder:O(n) 線程不安全、單執行緒首選
StringBuilder sb = new StringBuilder();
for (String s : list) sb.append(s);
String result = sb.toString();

// ✅ StringBuffer:線程安全版本 (較慢)
// ✅ Java 8+ String.join()、Collectors.joining()

7. 重視 GUI/使用者體驗

  • GUI 是使用者感知系統品質的唯一介面
  • 不要只做「電腦友好」的介面,要做「人類友好」的
  • 原型先行:先做可點擊原型,獲取回饋,再寫代碼
  • 換位思考:分頁、載入狀態、錯誤提示、無障礙設計
  • 若非專長,請專業 UX/UI 設計師協助

8. 需求文檔先行

「沒有文檔的需求只是幻覺。」

  • 每項業務需求必須落筆成文
  • 時程再緊,文檔不可省略
  • 文檔是溝通契約、驗收依據、維護地圖
  • 採用輕量級格式:Markdown、Confluence、ADR (架構決策記錄)

9. 單元測試:寫在代碼前、保持同步、覆蓋核心邏輯

TDD 紅-綠-重構循環

  1. 紅:寫失敗測試 (定義介面與預期行為)
  2. 綠:寫最小代碼通過測試
  3. 重構:優化代碼,測試保持通過

必測項目

  • 公共 API 進出參數邊界
  • 核心業務規則 (折扣計算、狀態機轉換)
  • 異常處理路徑
  • 有副作用的方法 (DB 寫入、外部 API 呼叫 → 用 Mock)

測試命名規範

@Test
void calculateDiscount_VipCustomer_OverThreshold_Returns90Percent() { }

@Test
void placeOrder_InsufficientStock_ThrowsOutOfStockException() { }

10. 品質重於數量:別用加班掩蓋技術債

  • 主管看重:低缺陷率、易維護架構、準時交付品質
  • 不看重:加班時長、代碼行數、功能堆疊
  • 遵循前 9 條 → 自然產出高品質代碼 → 少 Bug → 少加班
  • 可持續的工作節奏 > 短期爆發

總結:從「會寫代碼」到「工程師思維」

這 10 條鐵律不只是規範,更是專業素養的體現。知道不等於做到,請從今天開始,在每次 Code Review、每次提交、每次重構時刻意練習,內化為肌肉記憶。專業,是被信任的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved