我相信,這個問題代碼必須在本網站上提出。但我不能夠搜索到,這是基本的疑問句,但java.lang.StackOverflowError?
public class A {
A obj = new A();
public static void main(String arg[])
{
A ob = new A();
}
}
這是給java.lang.StackOverflowError
,爲什麼我沒有得到它,因爲我那可憐的基本concept-的?
我相信,這個問題代碼必須在本網站上提出。但我不能夠搜索到,這是基本的疑問句,但java.lang.StackOverflowError?
public class A {
A obj = new A();
public static void main(String arg[])
{
A ob = new A();
}
}
這是給java.lang.StackOverflowError
,爲什麼我沒有得到它,因爲我那可憐的基本concept-的?
你的類本質上等同於:
public class A {
A obj;
public A() {
obj = new A();
}
public static void main(String arg[]) {
A ob = new A();
}
}
現在你看你是怎麼那個錯誤?每次創建一個A
的實例時,構造函數get的調用將再次調用以創建另一個實例,然後繼續填充堆棧直至溢出。
每當你創建一個對象A
它會創建另一個對象A
,將創造另一個對象A
...
當您創建A型的對象,你要創建一個類型的新對象,它創建類型的新對象等
StackOverflow上發生的錯誤,因爲在應用程序中的一個非常深刻的遞歸。當你實例化A
時,你也調用相同的構造函數來創建另一個A
實例,因此,你有一個遞歸樹,從而導致堆棧溢出錯誤。
因此,真正的問題是深度遞歸調用來實例化A
。
當創建「新A」時會發生什麼? –
一次又一次地調用構造函數 – Raghunandan
創建了新的A類實例。 –