为什么它会在运行时抛出NullPointerException?

时间:2014-06-17 18:42:39

标签: java

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。发生了什么?

5 个答案:

答案 0 :(得分:3)

x = i + y;

问题是iInteger对象并初始化为null。

您可以通过替换以下内容来解决此问题:

Integer i;

使用以下其中一项:

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

答案 1 :(得分:2)

Integer是一个对象,而不是一个原始类型。默认情况下,对象初始化为null。 NullPointerException意味着您尝试发送消息"到尚未初始化的对象。

尝试更改

Integer

int

答案 2 :(得分:1)

使用Integer时,默认情况下会初始化为 null 。这是因为Integer是一个对象,而不是像int这样的基本类型。当您尝试使用NullPointerException的对象(尚未初始化)时,您会得到null。要解决此问题,您可以使用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));
 }
}

答案 3 :(得分:1)

Integer是一个非基本类型的对象。默认情况下,它取值为null并且已初始化。使整数I = 0

答案 4 :(得分: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被声明但未初始化:它是一个空指针。