这是我的代码:
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;
有人可以帮帮我吗?
答案 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.
}
其余代码应该可以使用。