从另一个类声明方法时出现NullPointerException

时间:2017-07-22 02:02:00

标签: java arrays object nullpointerexception declaration

我一直在努力解决这个NullPointerException问题:

Exception in thread "main" java.lang.NullPointerException
    at LinearSearcher.<init>(LinearSearcher.java:12)
    at DemoSearches.main(DemoSearches.java:4)

通过研究,我发现当您声明引用类型但不创建对象时会发生此异常。在我的情况下,我正在尝试声明LinearSearcher

我试图用我的代码理解这一点,但我遇到了困难

LinearSearcher的代码:

public class LinearSearcher implements Searcher {

private int[] numbers;

public LinearSearcher() {

  numbers[0] = 1; // Line 12 Here
  numbers[1] = 10;
  numbers[2] = 20;
  numbers[3] = 30;
  numbers[4] = 40;
  numbers[5] = 50;
  numbers[6] = 60;
  numbers[7] = 70;
  numbers[8] = 80;
  numbers[9] = 90;

}


public int searchFor(int key) {
  for (int i = 0; i < numbers.length; i++){
    if (numbers[i] == key) {
      return i;
    }
  }
  return NOT_FOUND;
}


public void display() {
  for (int i = 0; i < numbers.length; i++){
  }
 }
}

声明LinearSearcher的类:

public class DemoSearches {

  public static void main(String args[]) {

    LinearSearcher search = new LinearSearcher(); // Line 4 Here

    search.display();


    search.searchFor(50);
    search.searchFor(100);

 }
}

3 个答案:

答案 0 :(得分:4)

numbersnull,因为您尚未对其进行初始化。你可以改变

private int[] numbers;

private int[] numbers = { 1, 10, 20, 30, 40, 50, 60, 70, 80, 90 };

并消除问题。其他解决方案,添加

numbers = new int[10];

在您当前的作业之前。

答案 1 :(得分:2)

您永远不会初始化numbers数组,因此当您尝试在LinearSearcher构造函数中访问它时,您尝试访问不存在的数组。所以抛出异常。

答案 2 :(得分:0)

在执行numbers = new int[10];等之前,您需要执行numbers[0]。这将创建对象,以便可以使用它。