我可以在Java中初始化一个实例变量,当我在声明它时初始化它,并使用方法的返回值对其进行初始化,我将在后面的类中定义它。
这样的事情:
public class MyClass {
integers[] myArray = new integers[length()];
int length() {
....
}
}
length()
给了我一些数字,我想要这个数字来确定数组中元素的数量。这对我来说似乎有道理,但我得NullPointerException
(我不知道这个错误初始化是否导致异常,但我不知道到底是什么,因为我之前从未做过这个初始化,我是不确定它是否正确)。
答案 0 :(得分: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
答案 1 :(得分:2)
在执行此操作之前,可能值得考虑这种语法是否有点混乱,并且在构造函数或初始化块中初始化数组可能更合适。
private final int[] myArray;
public MyClass() {
myArray = new int[length()];
}
或
private final int[] myArray;
{
myArray = new int[length()];
}
答案 2 :(得分: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!
}
}
如果这个是问题,我建议你在构造函数中进行初始化 - 这样排序就更清晰了。
答案 3 :(得分:-3)
你必须使方法成为静态的:
static int length() { … }