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

Java 避免空指針異常的 7 大最佳實踐

     編輯:Java 相關知識

前言

NullPointerException (NPE) 是 Java 開發中最常見、最令人頭疼的異常。本文總結 7 種有效避免 NPE 的編程技巧,幫助你寫出更健壯的代碼。

核心技巧

1. 常量/字面量在前調用 equals

錯誤: status.equalsIgnoreCase("Finish") —— 若 status 為 null 拋出 NPE。

正確: "Finish".equalsIgnoreCase(status) —— 字面量不為 null,安全調用。

2. 集合返回空集合而非 null

錯誤: 返回 null 導致調用者需判空。

正確: 返回 Collections.EMPTY_LIST、EMPTY_SET、EMPTY_MAP 等不可變空集合。

public static List getEmployees() {
    return Collections.EMPTY_LIST; // 而非 null
}

3. 善用集合/對象的判空方法

使用 isEmpty()、contains()、containsKey()、hasNext() 等方法先行檢查,避免直接操作可能為 null 的引用。

4. 使用斷言

Java 1.4+ 提供 assert 關鍵字,在開發/測試階段驗證前置條件。

public static String getManager(String employeeId) {
    assert (employeeId != null) : "employeeId must be not null";
    return "qiyadeng";
}

運行時需加 -enableassertion 參數啟用。

5. 使用 Spring Assert 等工具類

org.springframework.util.Assert 提供豐富的驗證方法,拋出 IllegalArgumentException 信息更清晰。

Assert.notNull(employeeId, "employeeId must be not null");
Assert.hasLength(employeeId, "employeeId must has length greater than 0");

6. 異常處理或顯式判空

對可能返回 null 的方法調用,使用 try-catch 捕獲 NPE 或調用前 if (obj != null) 判斷。

7. 避免過長的鏈式調用

不推薦: findViewObject("VO").getCurrentRow().getAttribute("Attr") —— 任一環節為 null 都難以定位。

推薦: 分步賦值中間變量,便於調試和加入判空邏輯。

8. 利用 Apache Commons Lang StringUtils

StringUtils.isEmpty()、isBlank()、equals() 等靜態方法內部已處理 null,調用安全。

總結建議

  • 編碼時刻思考:這個引用會不會為 null?
  • 對於暫時無法修復的隱患,添加 // TODO 標記便於後續處理。
  • 優先使用「防衛性編程」:參數校驗、返回空集合、工具類輔助。

出處:https://www.qiyadeng.com/

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