2014-10-20 56 views
-4

我的代碼:塊在Java中的類聲明

class Y 
    { 
     { 
      System.out.println("pranav"); 
      Y a = new Y(); 
     } 

     public static void main(String args[]) 
     { 
      Y b = new Y(); 
     } 
    } 

輸出:

無限循環

我的問題是控制的流程(程序的執行)從哪裏開始,它是如何工作的,任何人都可以解釋一下嗎?

回答

2

這個匿名初始化塊導致你的無限遞歸;

{ 
    System.out.println("pranav"); 
    /*Y a=new Y();*/ 
} 

不要在那裏實例化一個新的Y,這是遞歸的。

因爲該塊被複制到默認空的構造函數;

public Y() { 
    super(); 
    System.out.println("pranav"); 
    /*Y a=new Y();*/ // <-- like so. 
} 
+1

我已經做了。初始化塊被複制到(默認)構造函數中。 – 2014-10-20 14:37:55