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

Java 開發必備 6 大編程技巧:避坑指南與最佳實踐

     編輯:Java 相關知識

前言

資深開發與新手的區別,往往在於對細節的把控。本文整理 6 個高頻實戰技巧,涵蓋空指針預防、API 信任度、魔數消除、誤賦值避免、集合校驗、方法最終態,助你寫出更健壯的代碼。

技巧一:字面量放左邊,防空指針

// ❌ 危險:variable 為 null 時拋 NPE
if (variable.equals("expected")) { ... }

// ✅ 安全:字面量調用 equals,null 直接返回 false
if ("expected".equals(variable)) { ... }

同理適用於 == 比較枚舉、常量。養成「常量在左」習慣,可消除大量無謂 NPE。

技巧二:不盲目信任早期 JDK API

早期 File.list() 目錄不存在或非目錄時返回 null 而非空數組,直接遍歷會 NPE。

File file = new File(path);
String[] files = file.list();
if (files != null) {  // 必須判空
    for (String f : files) { ... }
}

原則:對外部依賴(JDK、三方庫、數據庫)的返回值永遠做防御性校驗。

技巧三:告別魔數 -1,使用常量語義

// ❌ 硬編碼 -1
if (str.indexOf("x") != -1) { ... }
while ((len = in.read(buf)) != -1) { ... }

// ✅ 定義語義常量
private static final int NOT_FOUND = -1;
private static final int EOF = -1;

if (str.indexOf("x") != NOT_FOUND) { ... }
while ((len = in.read(buf)) != EOF) { ... }

若未來 JDK 修改約定(極小概率),只需改常量定義;更重要的是代碼可讀性大幅提升。

技巧四:防止誤賦值,常量靠左或用 Yoda 條件

// ❌ 易手滑寫成 =,編譯不報錯(boolean 除外)
if (status = 1) { ... }

// ✅ 常量在左,誤寫成 = 編譯報錯
if (1 == status) { ... }

// ✅ 或用最終態變量
final int expected = 1;
if (expected == status) { ... }

註:=== 是 JavaScript 全等運算符,Java 無此運算符。

技巧五:集合/數組先判空再判長度

// ❌ 先判 length,list 為 null 時拋 NPE
if (list.size() > 0) { ... }

// ✅ 短路原則,先判 null
if (list != null && !list.isEmpty()) { ... }

// ✅ Java 8+ 更優雅
if (CollectionUtils.isNotEmpty(list)) { ... } // Apache Commons
// 或
if (list != null && list.size() > 0) { ... }

技巧六:謹慎使用 final 修飾方法

public class BaseService {
    // 禁止子類覆寫,鎖定核心邏輯
    public final void criticalWorkflow() {
        // 模板方法模式:固定流程,子類實現抽象步驟
        step1();
        doBusiness(); // protected abstract
        step3();
    }
}

適用場景:模板方法模式、工具類工廠方法、安全敏感操作。慎用場景:需高度擴展的業務邏輯,final 會限制多態性。

總結

技巧核心口訣
防 NPE常量調用 equals,字面量靠左
信任邊界外部返回值必判空
消魔數-1 入常量,語義化命名
防誤賦值常量靠左,編譯器兜底
集合校驗先非空,後非空
final 方法鎖定骨架,慎用

這些技巧看似微小,卻能在項目長期迭代中節省無數調試時間。建議納入團隊 Code Review 清單,培養肌肉記憶。

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