我有两个课程:Main
和Sub1
。
anArray
在Sub1
中声明如下:
public static int[] anArray;
public Sub1 () {
anArray = new int[15];
然后在Sub1
中,我尝试设置它:
public static void methodOne() {
anArray[0] = 5;
但是当我尝试运行代码时,我得到一个NullPointerException
,并且消息指定:
Sub1.methodOne (Sub1.java:249)
这是指代码:
anArray[0] = 5;
为什么不让我改变阵列?如果我发表评论,错误仍然会发生,只是移动到另一行我尝试更改数组索引的值。
答案 0 :(得分:4)
anArray
是一个static
字段,尝试在该类的构造函数中初始化它没有意义。如果您希望它为static
,只需在声明处初始化它:
public static int[] anArray = new int[15];
如果您希望anArray
和methodOne
成为实例成员,请删除他们的static
修饰符。
无论哪种方式,我都建议你制作变量anArray
private
,这样只有公开曝光的方法才能修改其内容和final
,因此您不会意外地重新分配它。
答案 1 :(得分:3)
尝试按如下方式初始化数组,
public static int[] anArray = new int[15];
static
变量并非特定于类的实例,因此在默认构造函数中初始化变量可能没有意义(尽管我必须要查看更多代码才能确定如果是这种情况)。
答案 2 :(得分:1)
您需要显示更多代码,但您的方法和数组是静态的,并且您正在构造函数中初始化数组。我的猜测是你没有在任何地方调用构造函数。