2014-04-25 28 views
-4

爲什麼下面的代碼會拋出異常(java.lang.StackOverflowError)?在Java中創建對象時的異常

public class Test { 
    Test f = new Test(); 


    public static void main(String[] args) { 
     Test f = new Test(); 
     System.out.println("Hi"); 
    } 
} 

謝謝。

+0

StackOverflowError不是一個例外。你應該得到這個錯誤,因爲你有無窮的遞歸。你期望發生什麼? –

+4

使用調試器來遍歷代碼,問題會非常明顯。 – MikeTheLiar

+0

@mikeTheLiar如果人們開始這樣做,那麼在這個論壇上的25%的問題將自己回答。 ;) –

回答

6

每個Test對象創建一個Test對象,該對象創建一個Test對象,令人不快。

基本上,具有初始化表達式的實例字段f會導致一個無限遞歸循環,在遞歸調用構造函數時會彈出堆棧。

+1

這是快速的...... –

0

測試對象無限地相互引用。解決這個問題的辦法是把主要的()類測試外類測試中刪除測試的實例構造函數:

public class Test { 
    //some code here 
} 

public class RunTest { 
    public static void main(String[] args) { 
     Test f = new Test(); 
     System.out.println("Hi"); 
    } 
} 

而且,這是最好的名稱,而不main()的別的東西,因爲經常測試類指的是main()的類。

+0

如果沒有其他代碼改變移動主要方法不會改變任何東西。它的構造函數是錯誤的 –

0

答案在StackOverflowError JavaDoc中。

由於應用程序遞歸太深而發生堆棧溢出時引發。

您正在無休止地創建Test對象。