爲什麼在其構造函數中實例化相同類的對象會引發StackOverflowError
? 例如,Java - 在其構造函數中實例化同一類的對象
public class A {
public A() {
A a = new A()
}
}
將拋出StackOverFlowError
?
爲什麼在其構造函數中實例化相同類的對象會引發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
}
功能只是不斷自稱,並且每次調用需要的堆棧空間。遲早堆棧會耗盡,你會得到一個異常。
當A()
不斷調用自身(new A()
)時,會發生完全相同的事情。
因爲您的new A()
語句將調用A
類的構造函數,該類將調用A
類的構造函數,依此類推。這創建了一個無限遞歸。這會導致JVM拋出StackOverflowError
。
無限遞歸的一個很好的例子。 – DwB 2012-01-31 18:31:10