2016-11-07 24 views
3

爲什麼變量可能調用(初始化自己)調用相同變量(看起來是遞歸)的方法?我期望看到無盡的遞歸,但它編譯沒有錯誤。任何解釋?正向引用和遞歸

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

您是否明白答案? – ItamarG3

回答

5

如果通過在調試器單步執行代碼,你會看到i = test();只運行一次永遠。

i的上一個值是0,這就是i已經初始化之前的返回值test()

java編譯器無法檢測到每個可能的前向引用,只有最簡單的引用。