簡體   English   中英

為什么在運行時拋出NullPointerException?

[英]why it throw A NullPointerException occurs at runtime?

public class Boxer1 {
    Integer i;
    int x;

    public Boxer1(int y) {
        x = i + y;
        System.out.println(x);
    }

    public static void main(String[] args) {
        new Boxer1(new Integer(4));
    }
}

當我嘗試運行此代碼時,在第5行出現NullPointerException發生了什么事?

x = i + y;

問題是i是一個Integer對象,並初始化為null。

您可以通過以下方法解決此問題:

Integer i;

具有以下之一:

int i;
int i = 0;
Integer i = 0;

整數是一個對象,而不是原始類型。 默認情況下,對象被初始化為null。 NullPointerException表示您試圖將“發送消息”發送到尚未初始化的對象。

嘗試改變

Integer

int

使用Integer ,默認情況下它將初始化為null 這是因為Integer是一個對象,而不是像int這樣的原始類型。 當您嘗試使用null對象(尚未初始化)執行某操作時,會得到NullPointerException 要解決此問題,您可以使用int

int i;

使用int ,如果未分配任何值,它將自動初始化為0。 因此,您的最終代碼應如下所示:

public class Boxer1 {
 int i; //<<< this line was changed from Integer i; to int i;
 int x;

 public Boxer1(int y) {
  x = i + y;
  System.out.println(x);
 }

 public static void main(String[] args) {
  new Boxer1(new Integer(4));
 }
}

整數是不是原始類型的對象。默認情況下,它為null並已初始化。 使整數I = 0

public class Boxer1 {
    Integer i;
    int x;
    public Boxer1(int y) {
        x=i+y;
        System.out.println(x);
    }
    public static void main(String[] args) {
        new Boxer1(new Integer(4));
     throw new NullPointerException(); 
    try{
        doBoxer1();
    } catch (NullPointerException ex){
        System.out.println("NPE encountered in body");
    } catch (Throwable ex){

    }

    }
}

注意:整數i已聲明但未初始化:它是空指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM