class Test1 {
int i = j; // compile-time error:
// incorrect forward reference
int j = 1;
}
和
class Z {
static int i = j + 2;
static int j = 4;
}
都会报"非法向前引用",我的理解是在变量声明之前使用了它,c语言中这样做是正常的,使用方法和变量之前都要先定义或者声明,习惯了java中方法可以不按顺序随便写(当然变量最好不要乱放位置)就感觉有点奇怪.
java语言规范中有一句不太明白的解释:
The restrictions above are designed to catch, at compile time, circular or otherwise malformed initializations
但是方法却不以这种形式来检查,所以以下代码不会报错,而且执行的结果为0:
class Z {
static int peek() { return j; }
static int i = peek();
static int j = 1;
}
class Test {
public static void main(String[] args) {
System.out.println(Z.i);
}
}
想请教一下,为什么要这样规定,是为了规避什么问题??
------解决方案-------------------- int i = j;
这时候j还没被声明,所以编译异常这个很好理解。 ------解决方案-------------------- 先声明 后使用 ------解决方案--------------------