都2025了,Copilot怎麼說?
Java 的 main方法是特殊的。它是 Java 應用程序的入口點,通常被稱為「main 方法」。JVM(Java 虛擬機)會尋找具有以下簽名的方法作為應用程序的啟動點:
public static void main(String[] args)
讓我們來拆解這個方法簽名:
public:這意味著該方法是公開的,可以從任何地方訪問。static:這意味著該方法是靜態的,屬於類而不是實例,這允許 JVM 在不創建類實例的情況下調用它。void:這意味著該方法不會返回任何值。main:這是方法的名稱,必須是 main。(String[] args):這是方法的參數,它是包含命令行參數的字串陣列。
因此,JVM 會根據這個特殊的簽名來識別應用程序的入口點。如果簽名不同,JVM 將無法識別該方法,並且應用程序不會啟動。
入口點_Entry point
JVM會找到定義成public static void main(String[] args)的地方,開始運行程式。

存取修飾子_Access Modifier
修飾子有下列四種,常見狀況只需要先理解public跟private。
- public
- private
- protected
- package(default)
下圖可看到,當在我的Main.java中輸入System,LSP(Language Server Protocol)自動提示有哪些方法(method)或屬性(field)可以使用。

實際檢視currentTimeMillis在System.class中的定義,可以發現宣告為public,也就是公開讓外部可以呼叫。
換言句話說,如果今天currentTimeMillis宣告為private,表示在System.class裡面私有,不允許外面呼叫,從Main.java使用System.class時,LSP上也會看不到該項目的提示。

靜態關鍵字_Static
一樣以currentTimeMillis為例,檢視在System.class中的定義,可以發現宣告為static。

回到Main.java,我們在使用的時候是透過System.class直接調用currentTimeMillis(),而不是創建實例後再調用,例如:
// 實際上也無法這麼做,因為建構子為private
System s = new System();
Long currentTimeMillis = s.currentTimeMillis();
// System.class直接調用
Long currentTimeMillis = System.currentTimeMillis();

回傳值_Return Value
在呼叫function後取得的結果,例如
Long currentTimeMillis = System.currentTimeMillis();
即透過System.class,調用currentTimeMillis後取得回傳值,把回傳值賦值給新的變數currentTimeMillis,其型別為Long
傳入參數_Function Argument
來看一下實際執行結果,並且在後面代入123、456,以空白做分隔。

也就是說,在終端機內代入的命令列參數,會以字串陣列的形式傳給main,意即(String[] args)接收到的內容。
備註
- 程式入口點為開始執行的地方,但如果有
static區塊,裡面的程式執行順序會是在main之前。 - 為了不涉及過多物件導向的概念,暫時把下列用詞視為同義
方法(method)/函式(function)- 調用/呼叫
String[] args其中args為變數名稱,因此要叫argv、aaa、bbb等都可以,一般還是遵循慣例為args。




















