0

我可以在Java中初始化一个实例变量,当我声明它时初始化它,并使用我稍后在类中定义的方法的返回值来初始化它。

像这样的东西:

public class MyClass {

     integers[] myArray = new integers[length()];

     int length() {
     ....

     }
}

length()给我一些数字,我希望这个数字确定数组中元素的数量。这对我来说似乎是合理的,但我得到NullPointerException(我不知道这个错误初始化是否导致异常,但我不知道究竟是什么,而且因为我以前从未做过这个初始化,我不确定它是否正确)。

4

4 回答 4

3

对我来说似乎工作正常,使用静态或非静态方法:

public class test
{
    public int[] myarray = new int[this.length()];

    public int length() {
        return 5;
    }

    public static void main(String[] args)
    {
        test foo = new test();
        for (int element : foo.myarray) {
            System.out.println(element);
        }
    }
}

产生:

0
0
0
0
0
于 2009-02-10T07:52:03.597 回答
2

问题可能出在length()方法的某个地方。我怀疑它指的是一个尚未适当初始化的变量。这是一个程序示例,它显示:

public class MyClass {

    int[] myArray = new int[length()];

    // This is only initialized *after* myArray
    String myString = "Hi";

    int length() {
        return myString.length();
    }

    public static void main(String[] args) {
        new MyClass(); // Bang!
    }
}

如果这问题所在,我建议您改为在构造函数中进行初始化 - 这样排序会更加清晰。

于 2009-02-10T08:37:37.763 回答
2

在执行此操作之前,可能值得考虑此语法是否会稍微令人困惑,并且在构造函数或初始化块中初始化数组可能更合适。

private final int[] myArray;

public MyClass() {
    myArray = new int[length()];
}

或者

private final int[] myArray;
{
    myArray = new int[length()];
}
于 2009-02-10T07:54:38.117 回答
-3

您必须使方法静态:

static int length() { … }
于 2009-02-10T07:49:56.083 回答