2011-02-11 16 views
0

考慮以下基本類:Java:當JVM運行main()方法時,構造函數是否隱式調用?

public class ConstructorExample { 

    public ConstructorExample(){ 
     System.out.println("Constructor called."); 
    } 

    public static void main(String[] args) { 
     ConstructorExample ce = new ConstructorExample(); 
    } 

} 

當執行上面的代碼,「稱爲構造」。只打印一次。顯然,調用main方法時,顯式調用構造函數。

但是,當JVM加載類並最初啓動應用程序時,爲什麼不調用構造函數?

回答

6

沒有執行main()方法jvm沒有構建類的對象,這就是爲什麼main()方法是static

它正在與

ConstructorExample ce = new ConstructorExample(); 

執行確認以下行

註釋掉

\\ConstructorExample ce = new ConstructorExample();

+0

因此構造函數只能稱爲類的非靜態實例嗎? – Mikaveli 2011-02-11 11:07:42

1

爲什麼JVM會在啓動時調用構造函數? 「main」是一個靜態方法,它不需要創建ConstructorExample的實例。

1

爲什麼需要通過對象調用main()方法?最後,它是一個static方法。
main()方法的作用是static是JVM不需要創建任何對象來調用main()方法。

因此,當JVM加載.class文件時,JVM會查找要運行的main()方法。當它看到一個,它開始執行程序。之後,在創建對象時調用構造函數(這裏是這種情況),因此僅打印一次「Constructor called」。

相關問題