今天終於搞懂了:爲什麼 Java 的 main 方法必須是 public static void?

Main 方法是我們學習 Java 編程語言時知道的第一個方法,你是否曾經想過爲什麼 main 方法是 public、static、void 的。當然,很多人首先學的是 C 和 C++,但是在 Java 中 main 方法與前者有些細微的不同,它不會返回任何值,爲什麼 main 方式是 public、static、void,這篇文章嘗試去找到一些答案。

Main 方法是 Java 程序的入口,記住,我們這裏不會討論 Servlet、MIDlet 和其他任何容器管理的 java 程序,在 java 核心編程中,JVM 會查找類中的 public static void main(String[]args),如果找不到該方法就拋出錯誤 NoSuchMethodError:main 程序終止。

Main 方法必須嚴格遵循它的語法規則,方法簽名必須是 public static void,參數是字符串數組類型,如果是 Java1.5 及以後的版本還可以使用可變參數:

public static void main(String... args)

爲什麼 main 方法是靜態的(static)?

1.正因爲 main 方法是靜態的,JVM 調用這個方法就不需要創建任何包含這個 main 方法的實例。

2.因爲 C 和 C++ 同樣有類似的 main 方法作爲程序執行的入口。

3.如果 main 方法不聲明爲靜態的,JVM 就必須創建 main 類的實例,因爲構造器可以被重載,JVM 就沒法確定調用哪個 main 方法。

4.靜態方法和靜態數據加載到內存就可以直接調用而不需要像實例方法一樣創建實例後才能調用,如果 main 方法是靜態的,那麼它就會被加載到 JVM 上下文中成爲可執行的方法。

爲什麼main方法是公有的(public) ?

Java 指定了一些可訪問的修飾符如:private、protected、public,任何方法或變量都可以聲明爲 public,Java 可以從該類之外的地方訪問。因爲 main 方法是公共的,JVM 就可以輕鬆的訪問執行它。

爲什麼 main 方法沒有返回值(Void)?

因爲 main 返回任何值對程序都沒任何意義,所以設計成 void,意味着 main 不會有任何值返回。

總結

1.main 方法必須聲明爲 public、static、void,否則 JVM 沒法運行程序 。

2.如果 JVM 找不到 main 方法就拋出 NoSuchMethodError:main 異常,例如:如果你運行命令:java HelloWrold,JVM 就會在 HelloWorld.class 文件中搜索 public static void main (String[] args) 方法。

3.main 方式是程序的入口,程序執行的開始處。

4.main 方法被一個特定的線程 ”main” 運行,程序會一直運行直到 main 線程結束或者 non-daemon 線程終止。

5.當你看到“Exception in Thread main”如:Excpetion in Thread main:Java.lang.NullPointedException,意味着異常來自於 main 線程。

6.你可以聲明 main 方法使用 java1.5 的可變參數的方式如:publicstaticvoid main(String... args)。

7.除了 static、void、和 public,你可以使用 final,synchronized、和 strictfp 修飾符在 main 方法的簽名中,如:publicstrictfpfinalsynchronizedstaticvoid main(String[] args)。

8.main 方法在 Java 可以像其他方法一樣被重載,但是 JVM 只會調用上面這種簽名規範的 main 方法。

9.你可以使用 throws 子句在方法簽名中,可以拋出任何 checked 和 unchecked 異常。

10.靜態初始化塊在 JVM 調用 main 方法前被執行,它們在類被 JVM 加載到內存的時候就被執行了。

來源:suo.im/6v9d64

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章