空指针异常?

时间:2013-10-29 14:08:08

标签: java nullpointerexception

为什么我使用此代码获得NullPointerException?

public static void main(String args[]) throws FileNotFoundException {

    int i = 0;
    Job[] job = new Job[100];
    File f = new File("Jobs.txt");
    Scanner input = new Scanner(f);

    while (input.hasNextInt()) {
        job[i].start = input.nextInt();
        job[i].end = input.nextInt();
        job[i].weight = input.nextInt();
        i++;
    }
}

我在第一次运行时在while循环的第一行得到了错误。我还有一个单独的课程:

public class Job {
    public int start, end, weight;
}

和文本文件:

0 3 3
1 4 2
0 5 4
3 6 1
4 7 2
3 9 5
5 10 2
8 10 1

谢谢。

3 个答案:

答案 0 :(得分:8)

NullPointerException

当应用程序在需要对象的情况下尝试使用null时抛出。其中包括:

  • 调用null对象的实例方法。
  • 访问或修改空对象的字段。
  • 将null的长度视为数组。
  • 访问或修改null的插槽,就像它是一个数组一样。
  • 抛出null,就好像它是一个Throwable值。

    Job [] job = new Job [100];

截至目前,数组中的所有值均为null。因为你没有在里面插入任何Job对象。

  job[i].start = input.nextInt(); // job[i]  is null.

您需要做的只是初始化一个新的Job对象并分配给当前的index

变为

while (input.hasNextInt()) {
        Job job = new Job(); 
        job.start = input.nextInt();
        job.end = input.nextInt();
        job.weight = input.nextInt();
        job[i] =job;
        i++;
    }

答案 1 :(得分:5)

请参阅4.12.5. Initial Values of Variables

  

对于所有引用类型(§4.3),默认值为 null

您需要在尝试访问它之前初始化job数组,现在就像编写null.start一样,这当然会导致NullPointerException

答案 2 :(得分:4)

您刚刚初始化了一个Job类型的数组,您尚未初始化数组中的每个元素,因此异常。

 while (input.hasNextInt()) {
        job[i] = new Job(); // initialize here
        job[i].start = input.nextInt();
        job[i].end = input.nextInt();
        job[i].weight = input.nextInt();
        i++;
    }