2013-09-30 54 views
0

我相信,這個問題代碼必須在本網站上提出。但我不能夠搜索到,這是基本的疑問句,但java.lang.StackOverflowError?

public class A { 

A obj = new A(); 

public static void main(String arg[]) 
{ 
    A ob = new A(); 
} 
} 

這是給java.lang.StackOverflowError,爲什麼我沒有得到它,因爲我那可憐的基本concept-的?

+0

當創建「新A」時會發生什麼? –

+0

一次又一次地調用構造函數 – Raghunandan

+0

創建了新的A類實例。 –

回答

5

你的類本質上等同於:

public class A { 

    A obj; 
    public A() { 
     obj = new A(); 
    } 

    public static void main(String arg[]) { 
     A ob = new A(); 
    } 
} 

現在你看你是怎麼那個錯誤?每次創建一個A的實例時,構造函數get的調用將再次調用以創建另一個實例,然後繼續填充堆棧直至溢出。

5

每當你創建一個對象A它會創建另一個對象A,將創造另一個對象A ...

0

當您創建A型的對象,你要創建一個類型的新對象,它創建類型的新對象等

1

StackOverflow上發生的錯誤,因爲在應用程序中的一個非常深刻的遞歸。當你實例化A時,你也調用相同的構造函數來創建另一個A實例,因此,你有一個遞歸樹,從而導致堆棧溢出錯誤。

因此,真正的問題是深度遞歸調用來實例化A

相關問題