1

我有两个班级:MainSub1

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;

为什么它不让我改变数组?如果我将其注释掉,错误仍然会发生,并且只是移动到我试图更改数组索引值的另一行。

4

3 回答 3

4

anArray是一个static字段,尝试在该类的构造函数中对其进行初始化是没有意义的。如果你想要它static,只需在声明时初始化它:

public static int[] anArray = new int[15];

如果您打算成为实例成员anArraymethodOne成为实例成员,则删除它们的static修饰符。

无论哪种方式,我都建议您创建变量anArray private,以便只有公开公开的方法才能修改其内容,final这样您就不会意外地重新分配它。

于 2012-05-19T22:58:43.417 回答
3

尝试如下初始化数组,

public static int[] anArray = new int[15];

static变量并不特定于类的实例,因此在默认构造函数中初始化变量可能没有意义(尽管我必须查看更多代码才能确定是否是这种情况)。

于 2012-05-19T23:02:45.513 回答
1

您需要显示更多代码,但您的方法和数组是静态的,并且您在构造函数中初始化数组。我的猜测是你没有在任何地方调用构造函数。

于 2012-05-19T22:58:44.393 回答