2014-03-14 84 views
4

構造函數調用和構造函數執行有什麼區別? 我正在閱讀james Gosling關於java編程語言的構造函數順序依賴關係。作者指出,當你創建一個對象構造函數時首先被調用,然後feild成員被初始化,最後costructor被執行。這兩個對我來說聽起來都一樣。構造函數被「調用」與構造函數被「執行」?

+0

我懷疑,當你創建一個對象這意味着,在**超類**構造函數被調用,然後字段成員被初始化等等。我不認爲在使用不同的術語後面有任何意義s - 他們的意思是一樣的。但這只是一個猜測,因爲我沒有這本書。如果它在網上提供,以便我們可以自己閱讀文本,這可能會有所幫助。 – ajb

+0

創建對象時,java首先需要爲該對象分配內存空間來容納變量。 – WonderWorld

+2

爲什麼downvote?這是一個合法的問題... – fge

回答

6

在這種情況下,「援引」是當你調用它,「執行」是當的代碼體實際上是運行

在你調用它的時間和代碼運行的時間之間,字段被初始化。

所以,你調用它,然後初始化發生,然後它被執行。

試試這個:

class Example { 

    static int report() { System.out.println("initialize"); return 0; } 

    int x = report(); // <- [Step 2] Initialization 

    Example() { 
     System.out.println("execute"); // <- [Step 3] Execution 
    } 

} 

然後,在別處:

System.out.println("invoke"); 
new Example(); // <- [Step 1] Invocation 

輸出將是:

invoke 
initialize 
execute 
+1

+1;實際上,您可以在調試類並在構造函數中設置斷點時看到此行爲 – fge