2016-07-08 85 views
0

在執行下面我得到StackOverflow的錯誤:爲什麼下面的java代碼給出StackOverflow錯誤?

public class StackOverflow7 { 
    StackOverflow7 obj = new StackOverflow7(); 
    int finalCount = 0; 
    public static void main(String[] args) { 
     for(int i = 1 ; i <= 5 ; i++) 
     System.out.println(i); 

     StackOverflow7 localObj = new StackOverflow7(); 
     localObj.count(88); 
     System.out.println("Final Count :: " + localObj.finalCount); 
    } 

    private void count(int num){ 
     finalCount = finalCount + num; 
    } 
} 

回答

4

這條線:

StackOverflow7 obj = new StackOverflow7(); 

當你創建的StackOverflow7一個對象,你在這個行業本身做總是稱爲。因此,這條線遞歸地調用它自己,直到你得到一個StackOverflow錯誤。

1

由於這一行,你得到堆棧溢出:StackOverflow7 obj = new StackOverflow7();。每當你創建一個新實例時,它都會被調用,因此你創建一個新的實例並創建一個新的實例,等等。在你的堆棧跟蹤中,你應該看到很多<clinit>行。

你在主要方法中調用StackOverflow7 localObj = new StackOverflow7();開始整個事情。

若要解決此問題,請將obj設爲靜態字段或將其完全刪除,因爲您反正不使用它。

0

因爲該行的:

StackOverflow7 obj = new StackOverflow7(); 

您創建一個新的對象的時候這條線將executet並嘗試創建其他對象

相關問題