Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么它在运行时抛出NullPointerException?_Java - Fatal编程技术网

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

Java 为什么它在运行时抛出NullPointerException?,java,Java,当我尝试运行这段代码时,第5行出现NullPointerException。发生了什么事 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 Inte

当我尝试运行这段代码时,第5行出现NullPointerException。发生了什么事

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));
    }
}
问题是i是一个整数对象,并且初始化为null

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

x = i + y;
使用以下选项之一:

Integer i;

Integer是对象,而不是基元类型。默认情况下,对象初始化为null。 NullPointerException表示您试图向尚未初始化的对象发送消息

试着改变

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

使用整数时,默认情况下它初始化为null。这是因为Integer是一个对象,而不是像int这样的基元类型。当您尝试对一个未初始化的空对象执行某些操作时,会得到一个NullPointerException。要解决此问题,可以使用int:

使用int时,如果未指定任何值,它将自动初始化为0。因此,您的最终代码应该如下所示:

int i;

Integer是一个非基元类型的对象。默认情况下,它接受null并已初始化。使整数I=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));
 }
}

注意:整数i已声明但未初始化:它是空指针

在发帖之前,请将问题中的代码格式化。现在看起来很糟糕。可能是@user3690771的副本欢迎访问SO!:如果这对您有帮助,请将其标记为已接受,以帮助站点的未来访问者。这是一个有问题的修复。这将隐藏异常,而不会真正修复问题,即您没有初始化变量。两个整数i=0;int i=0;如果给定Boxer类名,我会假设OP在使用boxed原语。
int i;
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));
 }
}
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){

    }

    }
}