為什麼Java的main方法必須是public static void?

菜鳥要飛訂閱號發表於2022-12-05

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 的可變引數的方式如:
public static void main(String... args)
7、除了 static、void、和 public,你可以使用 final,synchronized、和 strictfp 修飾符在 main 方法的簽名中,如:
public strictfp final synchronized static void main(String[] args)
8、main 方法在 Java 可以像其他方法一樣被過載,但是 JVM 只會呼叫上面這種簽名規範的 main 方法。
9、你可以使用 throws 子句在方法簽名中,可以丟擲任何 checked 和 unchecked 異常。

10、靜態初始化塊在 JVM 呼叫 main 方法前被執行,它們在類被 JVM 載入到記憶體的時候就被執行了。

來源:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557372/viewspace-2675627/,如需轉載,請註明出處,否則將追究法律責任。

相關文章