2016-11-07 9 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 
    } 

} 

もう1つの例です。 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); 
    } 
} 
+0

答えを理解しましたか? – ItamarG3

答えて

5

あなたのデバッガでコードをステップ場合は、i = test();だけ今までに一度だけ実行されていることがわかります。

iの以前の値は0であり、の値はiが初期化される前に返されます。

Javaコンパイラは、可能なすべての前方参照を検出することはできません。最も単純なものだけが検出されます。

関連する問題