2015-11-02 62 views
0

標題可能太長,但我會解釋我自己。在主要方法中創建相同類的實例是否會創建兩個實例?

通常,當我創建一個主要的方法時,我把它放在我開始的類中。 最近我見過其他人的代碼,看到他們把主要方法放在一個新班級中。

我想過了,這個問題出現在我的腦海裏。

當我啓動程序時,是否創建包含主要方法的類的實例? 因此,當我在主要方法中創建相同類的新實例時,它會創建2個實例還是主要與該類本身無關,並且該類首先沒有實例,就像靜態方法不能使用非靜態變量?

+0

由於主要方法是靜態的(它們屬於類,而不是特定的實例),因此未創建實例。 –

回答

4

When i start the program, does instance of the class that contains the main mathod is created?

號是有原因的main()方法是publicstatic。您不必創建它在其中定義的類的實例。因此,當你執行你的程序時,包含main()的類將被加載,初始化,然後main()將被執行而不創建封閉類的實例。這就是爲什麼你不能從main()

+0

好的,謝謝。那麼爲什麼人們創建一個新類只是爲了從中啓動程序,然後創建要實際啓動的類的實例呢? – Amirag

+0

@amirag - 沒有必要。你可以只用一個主要方法創建一個類。 – TheLostMind

+0

好的,所以他們這樣做只是因爲它更容易看到? – Amirag

3

When I start the program, does instance of the class that contains the main method created?

號因爲main方法是static。封閉類的實例不會自動創建。 JLS-12.1 Java Virtual Machine Startup說(部分)

The Java Virtual Machine starts execution by invoking the method main of some specified class, passing it a single argument, which is an array of strings.

+0

感謝您的評論。所以你可以解釋爲什麼人們創建一個新班級來啓動該程序,而不是直接從課程中使用主要方法嗎? – Amirag

+0

您已將訂單混淆。 Main是入口點。 –

1

主要方法簽名訪問this:公共靜態無效(字符串ARGS [])

靜態: 由於主要方法是靜態的Java虛擬機可以調用它不會產生任何包含main方法的類的實例。如果main方法沒有被聲明爲靜態的,而JVM必須創建主類的實例,並且由於構造函數可以被重載並且可以有參數,那麼JVM就不會有任何確定且一致的方式來在Java中找到主方法。

public: public中的Java可以從該類之外訪問。由於Java中的main方法是公共的,因此JVM可以輕鬆訪問並執行它。

void:其作廢僅表示main不返回任何內容。

  • 主要方法必須聲明爲public,靜態和Java中 否則無效JVM將無法運行Java程序
  • JVM拋出NoSuchMethodException:主要如果沒有找到預定義特徵的主要方法提供給Java命令的類。
  • 主要方法是任何Core Java程序的入口點。執行 從主要方法開始。

這裏有一個竅門:直至幷包括Java 6的有可能做到這一點使用靜態初始化塊是指出在這個問題打印消息控制檯上不使用main()方法。例如使用下面的代碼:

class A3{ 
    static{ 
    System.out.println("static block is invoked"); 
    System.exit(0); 
    } 
} 

System.exit(0)讓JVM之前的程序退出正在尋找的主要方法,否則下面的錯誤將被拋出:

Exception in thread "main" java.lang.NoSuchMethodError: main

的Java 7 ,但是,這不起作用了,即使它編譯,當您嘗試執行它時,會出現以下錯誤:

The program compiled successfully, but main class was not found. Main class should contain method: public static void main (String[] args).

請參閱thisthis