【问题标题】:NullPointerException when declaring method from another class [duplicate]从另一个类声明方法时出现 NullPointerException [重复]
【发布时间】:2017-07-22 02:01:59
【问题描述】:

我一直在尝试解决这个 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);

 }
}

【问题讨论】:

  • 假设 private int[] numbers 未初始化。

标签: java arrays object nullpointerexception declaration


【解决方案1】:

numbersnull 因为你还没有初始化它。你可以改变

private int[] numbers;

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

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

numbers = new int[10];

在你当前的任务之前。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您需要先执行numbers = new int[10];,然后再执行numbers[0] 等。这将创建对象以便使用它。

      【讨论】:

        猜你喜欢
        • 2019-03-24
        • 2016-11-08
        • 2019-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多