【Java】public static void main(String[] args) ? 藉由實際例子進行初步認識
avatar-img
Err500

【Java】public static void main(String[] args) ? 藉由實際例子進行初步認識

更新於 發佈於 閱讀時間約 5 分鐘

都2025了,Copilot怎麼說?


Java main方法是特殊的。它是 Java 應用程序的入口點,通常被稱為「main 方法」。JVMJava 虛擬機)會尋找具有以下簽名的方法作為應用程序的啟動點:


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)的地方,開始運行程式。

raw-image


存取修飾子_Access Modifier


修飾子有下列四種,常見狀況只需要先理解publicprivate

  • public
  • private
  • protected
  • package(default)


下圖可看到,當在我的Main.java中輸入SystemLSP(Language Server Protocol)自動提示有哪些方法(method)屬性(field)可以使用。

raw-image


實際檢視currentTimeMillisSystem.class中的定義,可以發現宣告為public,也就是公開讓外部可以呼叫。

換言句話說,如果今天currentTimeMillis宣告為private,表示在System.class裡面私有,不允許外面呼叫,從Main.java使用System.class時,LSP上也會看不到該項目的提示。

raw-image



靜態關鍵字_Static


一樣以currentTimeMillis為例,檢視在System.class中的定義,可以發現宣告為static

raw-image


回到Main.java,我們在使用的時候是透過System.class直接調用currentTimeMillis(),而不是創建實例後再調用,例如:

// 實際上也無法這麼做,因為建構子為private
System s = new System();
Long currentTimeMillis = s.currentTimeMillis();


// System.class直接調用
Long currentTimeMillis = System.currentTimeMillis();
raw-image


回傳值_Return Value

在呼叫function後取得的結果,例如
Long currentTimeMillis = System.currentTimeMillis();

即透過System.class,調用currentTimeMillis後取得回傳值,把回傳值賦值給新的變數currentTimeMillis,其型別為Long

傳入參數_Function Argument


來看一下實際執行結果,並且在後面代入123456,以空白做分隔。

raw-image

也就是說,在終端機內代入的命令列參數,會以字串陣列的形式傳給main,意即(String[] args)接收到的內容。


備註

  1. 程式入口點為開始執行的地方,但如果有static區塊,裡面的程式執行順序會是在main之前。
  2. 為了不涉及過多物件導向的概念,暫時把下列用詞視為同義
    • 方法(method)/函式(function)
    • 調用/呼叫
  1. String[] args其中args為變數名稱,因此要叫argvaaabbb等都可以,一般還是遵循慣例為args
avatar-img
Err500
12會員
76內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
留言
avatar-img
留言分享你的想法!
Err500 的其他內容
學習Spring Boot是Java工程師必備技能,文章分享瞭如何自學並快速上手Spring Boot開發,包括架構、開發工具、專案建立以及實作過程。
相信很多初學者學python的原因,不外乎語法簡單、好上手、重點是有很多現成的套件可以玩。那麼,Java呢?有!當然有!而且還多到你不知道該選哪個好! 今天的文章主要示範如何在vscode新建立Java 的maven專案,並且透過maven安裝這些額外的套件(依賴)
最近配合公司政策換了新電腦,重新回想起從頭建環境的惡夢。本篇文就來記錄一下如何開始踏入Java的第一步,方便起見也使用相對Eclipse、IntelliJ來說輕量不少的VScode作為編輯器。
學習Spring Boot是Java工程師必備技能,文章分享瞭如何自學並快速上手Spring Boot開發,包括架構、開發工具、專案建立以及實作過程。
相信很多初學者學python的原因,不外乎語法簡單、好上手、重點是有很多現成的套件可以玩。那麼,Java呢?有!當然有!而且還多到你不知道該選哪個好! 今天的文章主要示範如何在vscode新建立Java 的maven專案,並且透過maven安裝這些額外的套件(依賴)
最近配合公司政策換了新電腦,重新回想起從頭建環境的惡夢。本篇文就來記錄一下如何開始踏入Java的第一步,方便起見也使用相對Eclipse、IntelliJ來說輕量不少的VScode作為編輯器。