2012-01-31 3 views
3

생성자 내에서 동일한 클래스의 객체를 인스턴스화하는 이유는 StackOverflowError입니다. 예를 들어 ,Java - 생성자에서 동일한 클래스의 객체를

public class A { 
    public A() { 
     A a = new A() 
    } 
} 

StackOverFlowError을 던질 것인가?

public void f() { 
    f(); // <---- will cause a stack overflow due to infinite recursion 
} 

기능은 단지 자신을 호출 유지하고, 각 호출 스택 공간이 필요합니다 :

+3

무한 재귀의 좋은 예입니다. – DwB

답변

10

는 정확히 다른 기능은 무조건 정확히 같은 매개 변수를 사용하여 자신을 호출과 동일합니다. 머지 않아 스택이 고갈되고 예외가 발생합니다.

A()이 계속 전화를 걸 때 (new A()) 정확히 같은 결과가 발생합니다.

5

new A() 문은 A 클래스의 생성자를 호출하는 A 클래스의 생성자를 호출하기 때문에. 이것은 무한 재귀를 만듭니다. 이것은 JVM이 StackOverflowError을 던지게합니다.

관련 문제