在《Java main()方法》一節中提到 main() 方法定義必須是“public static void main(String[] 字串陣列引數名)”,本節告訴大家為什麼在 Java 中定義 main 方法的語法是不可改變的。
1)public :這個欄位決定了方法是否可以被外部方法呼叫。我們知道C語言裡面的函數是執行作業系統環境中的,可以認為作業系統一個大的方法,這個方法呼叫了C語言的 main()。Java 中也是同樣的道理,只不過 Java 的 main 方法是跑在 JVM 中的。如果不限定 public,JVM 就不能呼叫 main 方法。
注意:在 Java SE1.4 以前是不強制 main 方法為 public 的。當 main 方法不是 public 時,有些版本的 Java 直譯器也可以執行 Java 應用程式。Java SE1.4 及以後的版本中強制 main 方法是 public。
物件導向的語言叫方法,例如 Java。程序導向的語言叫函數,例如C語言。實際上方法就是函數,函數就是方法,只是在不同的語言不同的稱呼而已。
2)static:在C語言中,所有的函數都可以被直接呼叫,main 函數相當於全域性方法,沒有類的概念,但在 Java 中一般先要建立一個類的物件,再通過物件呼叫方法,但是在執行 main 方法之前建立一個物件顯然是不可能的,因為 JVM 規定 main 方法為入口方法,從 main 開始執行。static 關鍵字就解決了這個問題,static 關鍵字修飾的方法可以視為類方法,不需要建立物件就可以直接呼叫該方法。
3)void:由於 Java 的主方法是棧中最底層的方法,所以並不存在能夠接收的值,沒有能接收 main 方法的返回值,所以使用 void。
為什麼 Java 不能像C語言,C++ 那樣返回 int 型值?
C語言的 main 函數的呼叫過程:首先,程式進入到入口方法之前,是發生了很多事情的。作業系統的安排,啟動執行時庫,執行時庫再初始化好環境,然後啟動你的入口函數,你的程式才正常的執行起來。等你的程式執行結束後,就退回到執行時庫,然後再退回到作業系統,然後系統再排程其他程式執行。因為 main() 不是由作業系統直接呼叫,所以返回型別不一樣也是可以理解的。可以認為執行時庫就是作業系統和 main 函數的中間聯絡人,在C語言中由執行時庫直接呼叫 main 函數,所以 main 函數的返回值也是執行時庫接收。
在 Java 中,可以認為是作業系統→JVM→main 方法這樣的呼叫過程,JVM 直接呼叫 main 方法,所以如果 main 方法有返回值,即 JVM 接收。但是 JVM 被設計為不接受任何返回值,所以 main 方法不能有返回值,只能 void。
4)String[]:類似於C語言中的引數 char**和int,Java 中陣列可以記錄數目,所以省去了 int 型別的引數來表示字串個數。
因此,main() 方法定義必須是:“public static void main(String[] 字串陣列引數名) ”,這是 Java 的規範。