为什么变量可以调用(初始化自身)一个调用相同变量的方法(似乎是一个递归)?我希望看到无休止的递归,但它编译没有错误.任何解释?
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
}
}
另一个例子.为什么在引用j时引用Backwards.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);
}
}
解决方法:
如果您单步执行调试器中的代码,您将看到i = test();只运行一次.
i的先前值为0,这是在初始化i之前返回的值test().
java编译器无法检测每个可能的前向引用,只能检测最简单的前向引用.
标签:java,recursion,reference
来源: https://codeday.me/bug/20190828/1755304.html