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

} 

또 다른 예입니다. j를 참조하는 것은 오류 ("불법 전방 참조")를 제공하는 동안 왜 Backwards.j 작업을 참조 않은 : 당신이 당신의 디버거에서 코드를 단계별 경우 i = test(); 한 번만 지금까지 실행되는 것을 볼 수

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의 이전 값은 0이고 의 값은 i이 초기화되기 전에 반환됩니다.

자바 컴파일러는 가능한 모든 순방향 참조를 감지 할 수 없으며 가장 단순한 참조 만 찾을 수 있습니다.