Java - 通过Class中的方法更改数组的值

时间:2013-06-13 22:12:52

标签: java arrays nullpointerexception

这是我的代码:

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;

有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:4)

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

您需要在构造函数中直接引用array。而不是

int[] array = new int[10];

使用此

array = new int[10];

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

private static int[] array;

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

private int[] array;

答案 1 :(得分:3)

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

我也猜测,因为你通过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];
  }

}

答案 2 :(得分:0)

MyClass()中的

键入此

this.array = new int [10];

而不是

int[] array = new int[10];

答案 3 :(得分: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];
}

}

答案 4 :(得分:0)

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

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.
}

其余代码应该可以使用。