3

这是我的代码:

class Myclass {

    private static int[] array;

    public static void main(String[] args) {
        Myclass m = new Myclass();

        for (int i = 0; i < 10; i++) {
            m.array[i] = i;
            System.out.println(m.array[i]);
        }
    }

    public Myclass() {
        int[] array = new int[10];
    }
}

java.lang.nullPointerException尝试执行此操作时会抛出一个:

m.array[i] = i;

有人可以帮我吗?

4

5 回答 5

4

您已经在构造函数中声明了一个局部变量array,因此实际上并没有初始化 in 中array声明的变量Myclass

您需要array在构造函数中直接引用。代替

int[] array = new int[10];

用这个

array = new int[10];

此外,您已经array在类的范围内声明了静态Myclass

private static int[] array;

这里只有一个实例Myclass,所以没关系,但通常这不是静态的,如果你在构造函数中初始化它。你应该删除static

private int[] array;
于 2013-06-13T22:14:50.690 回答
3

在您的构造函数中,您将分配给局部变量名称数组,而不是静态类变量也命名为数组。这是一个范围问题。

我还猜测,由于您通过 m.array 访问数组,因此您需要一个成员变量而不是静态变量。这是修复

class Myclass {

  private int[] array;

  public static void main(String[] args) {
    Myclass m = new Myclass();
    for (int i = 0; i < 10; i++) {
        m.array[i] = i;
        System.out.println(m.array[i]);
    }
  }

  public Myclass() {
        rray = new int[10];
  }

}
于 2013-06-13T22:16:07.967 回答
0

输入MyClass()这个

this.array = new int [10];

而不是这个

int[] array = new int[10];
于 2013-06-13T22:13:51.227 回答
0

您的代码应如下所示。在构造函数中,您没有初始化实例变量,而是创建了一个新的局部变量,并且实例变量未初始化,这导致了 NullPointerException。实例变量也不应该是静态的。

class Myclass {

  private int[] array;

public static void main(String[] args) {
 Myclass m = new Myclass();
 for (int i = 0; i < 10; i++) {
    m.array[i] = i;
    System.out.println(m.array[i]);
 }
}

public Myclass() {
      array = new int[10];
}

}
于 2013-06-13T22:14:54.683 回答
0

首先,如果您打算用作(ie )array的字段,请不要将其声明为,但是:mm.arraystatic

private int[] array;

接下来你要做的就是初始化它。最好的地方是在构造函数中:

public MyClass() {
    array= new int[10]; //just array = new int[10]; don't put int[] in front of the array, because the variable already exists as a field.
}

其余的代码应该可以工作。

于 2013-06-13T22:15:54.380 回答