2014-04-05 60 views
1

我是java編程的新手。今天這個例子是由我的老師在非靜態方法。任何身體告訴我詳細的解答從JVM體系結構的角度由於遞歸構造函數調用導致的java堆棧溢出

class Example { 
    int x = 10; 
    int y = 20; 
    Example e1 = new Example(); 

    public static void main(String[] args){ 
     System.out.println("main method start"); 
     Example e2 = new Example(); 
     System.out.println("main method end"); 
    } 
} 

回答

4

類示例{

int x=10; 
int y=20; 

Example e1=new Example(); // this is the reason 

正在發生的事情是當你在main()方法調用新的實例, Example e1=new Example();正在執行。

在示例e1 = new示例();您將再次創建Example()的新對象,該對象將再次調用新的Example()(對新的Example()的遞歸調用導致StackOverflowError)。