2013-01-06 49 views
1

我想不通爲什麼這個代碼:Java的構造問題

class HelloWorld 
{ 
    HelloWorld() 
    { 
     System.out.println("1 cnstr "); 
    } 

    public static void main(String[] args) 
    { 
     HelloWorld a = new HelloWorld(); 
    } 


    { 
     System.out.println("2 cnstr "); 
    } 
} 

給我的輸出:

2 cnstr 
1 cnstr 

爲什麼線System.out.println("2 cnstr ");工作?它是什麼樣的塊?我使用jdb,並發現JVM開始在HelloWorld()構造函數中的任何行之前使用此行阻止。

感謝您的幫助。

+0

您也可以使用'static {}'來初始化在構造函數之外聲明的靜態變量。 –

回答

6
{ 
     System.out.println("2 cnstr "); 
    } 

它的一個實例初始化塊。它在類的構造函數執行之前運行。

Documentation

Java編譯器副本初始化語句塊到每一個構造函數。 因此,這種方法可用於共享多個構造函數之間的代碼塊。

5

它是一個實例初始化塊,它在每個構造函數之前執行。

+0

構造函數或整個類的初始化塊? – alexvassel

+2

這樣的塊被用在該類的每個構造函數中。 http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html –