爲什麼下面的代碼會拋出異常(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");
}
}
謝謝。
爲什麼下面的代碼會拋出異常(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");
}
}
謝謝。
每個Test
對象創建一個Test
對象,該對象創建一個Test
對象,令人不快。
基本上,具有初始化表達式的實例字段f
會導致一個無限遞歸循環,在遞歸調用構造函數時會彈出堆棧。
這是快速的...... –
測試對象無限地相互引用。解決這個問題的辦法是把主要的()類測試外類測試中刪除測試的實例構造函數:
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()的類。
如果沒有其他代碼改變移動主要方法不會改變任何東西。它的構造函數是錯誤的 –
答案在StackOverflowError JavaDoc中。
由於應用程序遞歸太深而發生堆棧溢出時引發。
您正在無休止地創建Test對象。
StackOverflowError不是一個例外。你應該得到這個錯誤,因爲你有無窮的遞歸。你期望發生什麼? –
使用調試器來遍歷代碼,問題會非常明顯。 – MikeTheLiar
@mikeTheLiar如果人們開始這樣做,那麼在這個論壇上的25%的問題將自己回答。 ;) –