public static void main(String[] args) 是每個 Java 程式的入口,但為何必須這樣寫?逐詞拆解:
| 關鍵字 | 含義 | 為何必須 |
|---|---|---|
public |
訪問權限:公開 | JVM 啟動時在類外部調用 main,必須可被外部訪問 |
static |
靜態方法,屬於類而非實例 | JVM 不需實例化類即可直接呼叫 ClassName.main(),避免構造函數參數問題 |
void |
無返回值 | 程式入口不需向調用者(JVM)返回數據,結束即退出進程 |
main |
方法名稱(約定俗成) | JVM 規範硬編碼尋找 main 方法作為入口,不可自定義 |
String[] args |
參數:字串陣列 | 命令列參數自動封裝為陣列傳入,args[0] 為第一個參數 |
String[] args 實戰java MyApp arg1 arg2 "arg with space"
對應 args = {"arg1", "arg2", "arg with space"}。
"args": ["arg1", "arg2"]public static void main(String args[]) // 陣列寫法前置
public static void main(String... args) // 可變參數語法糖 (Java 5+)
編譯後位元碼完全一致,String... args 內部仍是陣列。
private static void main → JVM 無法訪問public void main (非 static) → JVM 需實例化類,無構造參數無法構造public static int main → 返回值 JVM 忽略,但違背規範public static void main(int[] args) → 參數型別不匹配,JVM 傳入的是 String 陣列JVM 規範定義了啟動協議:public static void main(String[]) 是雙方約定的「握手介面」。你遵守協議,JVM 就能正確啟動你的程式。這不是任意限制,而是跨平台、跨 JVM 實現的統一契約。