什麼是 Java 中的空指標異常

Mohammad Irfan 2023年10月12日
  1. 什麼是 Java 中的 NullPointerException
  2. 在 Java 中處理 NullPointerException
  3. 在 Java 中處理 NullPointerException
  4. 在 Java 中的命令列引數中遇到 NullPointerException
什麼是 Java 中的空指標異常

本教程介紹了 Java 空指標異常以及如何處理它。我們已經包含了一些示例程式供你遵循。

在 Java 中,任何引用變數的預設值都是指向記憶體位置但沒有任何關聯值的空值。當程式設計師嘗試使用此引用變數執行任何操作時,由於空條件,它會丟擲空指標異常。

這是可能發生此異常的場景,但此異常在 Java 中發生得最多——它會破壞程式碼並導致異常執行流程。以下幾點可以在 Java 程式碼中引發 NullPointerException

  • 呼叫空物件的例項方法。
  • 修改空物件的欄位。
  • 將 null 的長度視為陣列。

為了處理這個異常,Java 提供了一個位於 java.lang 包中的 NullPointerException 類。我們可以在 catch 塊中使用這個類來指定異常型別,然後捕獲它以避免程式碼中斷。

什麼是 Java 中的 NullPointerException

理解 NullPointerException 類的最基本示例是建立一個 string 物件,然後應用類似 toUpperCase() 的方法將字串轉換為大寫。看看下面的例子,注意它丟擲一個異常,因為 string 物件是空的:

public class SimpleTesting {
  static String str;
  public static void main(String[] args) {
    String newStr = str.toUpperCase();
    System.out.println(newStr);
  }
}

輸出:

Exception in thread "main" java.lang.NullPointerException

在 Java 中處理 NullPointerException

為了處理異常,Java 提供了一個 try-catch 塊。在這裡,我們可以使用這些塊來捕獲 NullPointerException 並避免程式異常終止。參考下面的例子:

public class SimpleTesting {
  static String str;
  public static void main(String[] args) {
    try {
      String newStr = str.toUpperCase();
      System.out.println(newStr);
    } catch (NullPointerException e) {
      System.out.println("Null Pointer: " + e.getMessage());
    }
  }
}

輸出:

{One=1, Two=2, Three=3}

在 Java 中處理 NullPointerException

如果你已經知道空引用,則可以在應用任何操作之前先使用 if-else 塊來驗證變數。這種方法是一個很好的解決方案,但它只有在你之前知道空引用時才有效。請參閱此處的程式碼:

public class SimpleTesting {
  static String str;
  public static void main(String[] args) {
    if (str != null) {
      String newStr = str.toUpperCase();
      System.out.println(newStr);
    } else
      System.out.println("String is null");
  }
}

輸出:

String is null

在 Java 中的命令列引數中遇到 NullPointerException

這是可能發生空指標異常的另一種情況。main() 方法的 args[] 陣列包含命令列引數,如果在執行時沒有提供引數,則它指向一個空引用。獲取其長度將返回 NullPointerException。請參考下面的示例:

public class SimpleTesting {
  static String[] arr;
  public static void main(String[] args) {
    int length = arr.length;
    System.out.println("Array length : " + length);
  }
}

輸出:

Exception in thread "main" java.lang.NullPointerException

相關文章 - Java Exception