前向引用和递归

时间:2016-11-07 20:35:42

标签: java recursion reference

为什么变量可以调用(初始化自己)一个调用相同变量的方法(似乎是一个递归)?我希望看到无休止的递归,但它编译没有错误。任何解释?

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);
    }
}

1 个答案:

答案 0 :(得分:5)

如果您单步执行调试器中的代码,您将看到i = test();仅运行一次。

i的上一个值为0,而test()的值在i初始化之前返回。

java编译器无法检测每个可能的前向引用,只能检测最简单的前向引用。