Java 的 main
方法是特殊的。它是 Java 應用程序的入口點,通常被稱為「main 方法」。JVM(Java 虛擬機)會尋找具有以下簽名的方法作為應用程序的啟動點:
public static void main(String[] args)
讓我們來拆解這個方法簽名:
public
:這意味著該方法是公開的,可以從任何地方訪問。static
:這意味著該方法是靜態的,屬於類而不是實例,這允許 JVM 在不創建類實例的情況下調用它。void
:這意味著該方法不會返回任何值。main
:這是方法的名稱,必須是 main。(String[] args)
:這是方法的參數,它是包含命令行參數的字串陣列。因此,JVM 會根據這個特殊的簽名來識別應用程序的入口點。如果簽名不同,JVM 將無法識別該方法,並且應用程序不會啟動。
JVM會找到定義成public static void main(String[] args)
的地方,開始運行程式。
修飾子有下列四種,常見狀況只需要先理解public
跟private
。
下圖可看到,當在我的Main.java
中輸入System,LSP(Language Server Protocol)自動提示有哪些方法(method)
或屬性(field)
可以使用。
實際檢視currentTimeMillis
在System.class
中的定義,可以發現宣告為public
,也就是公開讓外部可以呼叫。
換言句話說,如果今天currentTimeMillis
宣告為private
,表示在System.class
裡面私有,不允許外面呼叫,從Main.java
使用System.class
時,LSP上也會看不到該項目的提示。
一樣以currentTimeMillis
為例,檢視在System.class
中的定義,可以發現宣告為static
。
回到Main.java
,我們在使用的時候是透過System.class
直接調用currentTimeMillis()
,而不是創建實例後再調用,例如:
// 實際上也無法這麼做,因為建構子為private
System s = new System();
Long currentTimeMillis = s.currentTimeMillis();
// System.class直接調用
Long currentTimeMillis = System.currentTimeMillis();
在呼叫function
後取得的結果,例如
Long currentTimeMillis = System.currentTimeMillis();
即透過System.class
,調用currentTimeMillis
後取得回傳值,把回傳值賦值給新的變數currentTimeMillis
,其型別為Long
來看一下實際執行結果,並且在後面代入123、456,以空白做分隔。
也就是說,在終端機內代入的命令列參數,會以字串陣列的形式傳給main
,意即(String[] args)
接收到的內容。
static區塊
,裡面的程式執行順序會是在main
之前。方法(method)
/函式(function)
String[] args
其中args
為變數名稱,因此要叫argv
、aaa
、bbb
等都可以,一般還是遵循慣例為args
。