为什么变量可以调用(初始化自己)一个调用相同变量的方法(似乎是一个递归)?我希望看到无休止的递归,但它编译没有错误。任何解释?
class Forward {
static int test(){
return i;
}
static int i=test();
public static void main(String[] args) {
System.out.println(test()); //sout= 0
System.out.println(i); //sout =0
}
}
另一个例子。为什么在引用Backwards.j
时引用j
会产生错误("非法转发引用")
class Backwards{
//static int i=j; //illegal forward reference;
static int i=Backwards.j; //reference through class works
static int j=i;
public static void main(String[] args) {
System.out.println(i);
System.out.println(j);
}
}
答案 0 :(得分:5)
如果您单步执行调试器中的代码,您将看到i = test();
仅运行一次。
i
的上一个值为0
,而test()
的值在i
初始化之前返回。
java编译器无法检测每个可能的前向引用,只能检测最简单的前向引用。