為什麼我可以在Java中丟擲空指標異常(Null),以及為什麼它會向上轉型為NullPointerException?


在Java中,每種型別都有預設值。當您沒有初始化類的例項變數時,Java編譯器會代表您使用這些值初始化它們。空值是物件型別的預設值,您也可以在方法中手動將空值賦給物件。

Object obj = null;

但是,如果您這樣做,則不能使用具有空值的物件(或使用空值代替物件),否則將丟擲NullPointerException。

示例

public class Demo {
   String name = "Krishna";
   int age = 25;
   public static void main(String args[]) {
      Demo obj = null;
      System.out.println(obj.age);
      System.out.println(obj.name);
   }
}

執行時異常

Exception in thread "main" java.lang.NullPointerException
   at july_set3.Demo.main(Demo.java:11)

丟擲NullPointerException

您也可以使用throw關鍵字在Java中丟擲NullPointerException。

示例

public class ExceptionExample {
   public static void main(String[] args) {
      System.out.println("Hello");
      NullPointerException nullPointer = new NullPointerException();
      throw nullPointer;
   }
}

輸出

Hello
Exception in thread "main" java.lang.NullPointerException
   at MyPackage.ExceptionExample.main(ExceptionExample.java:6

丟擲空值

根據Java文件,如果您嘗試以下操作,則會發生NullPointerException:

  • 使用空物件呼叫方法(例項方法)。
  • 訪問、修改或列印空值(物件)的欄位。
  • 嘗試訪問(列印/在語句中使用)空值的長度。
  • 丟擲空值。
  • 訪問或修改空值的元素/槽。

這意味著如果您丟擲空值,則會發生空指標異常,它不是向上轉型。

示例

public class Demo {
   public static void main(String args[]) {
      throw null;
   }
}

執行時異常

Exception in thread "main" java.lang.NullPointerException
   at july_set3.Demo.main(Demo.java:5)

更新於:2020年7月2日

1K+瀏覽量

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.