2012-06-25 4 views
3

Line 4에서 할당 문을 실행할 때 컴파일러가 을 무시하고 foo 변수를 null로 유지하거나이 이상한 순간을 처리하는 다른 작업은 어떻게됩니까?클래스 자체에서 인스턴스 만들기

 

public class Foo { 
// creating an instance before its constructor has been invoked, suppose the "initializing" 
// gets printed in constructor as a result of the next line, of course it will not print it 
    private Foo foo = new Foo();//Line 4 

    public Foo() { 
     System.out.println("initializing"); 
    } 
} 
 
+2

어떤 일에서 내 생각 엔 .... OUT 힙 공간 –

+0

의 나는 순서가 중요 몰랐어요. 이 코드를 사용해 보셨습니까? – BlackVegetable

답변

4

여기서 컴파일러는 특별한 작업을 수행하지 않습니다. 이것이 효과가 없을 것이라고 경고 할 수는 있지만 결정하기가 어렵습니다.

StackOverflowError가 표시됩니다.

public class Foo { 
    private Foo foo = new Foo();//Line 4 

    public Foo() { 
     System.out.println("initializing"); 
    } 

    public static void main(String... args) { 
     Foo foo = new Foo(); 
    } 
} 

인쇄

Exception in thread "main" java.lang.StackOverflowError 
    at Foo.<init>(Foo.java:9) 
    at Foo.<init>(Foo.java:7) 
    at Foo.<init>(Foo.java:7) 
    .. many deleted ... 
    at Foo.<init>(Foo.java:7) 
    at Foo.<init>(Foo.java:7) 
+0

main()이 없으므로 어떻게 호출할까요? –

관련 문제