【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
留言分享你的想法!
avatar-img
Err500
12會員
76內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
Err500的其他內容
2025/03/16
這篇文章說明如何使用Spring JDBC Template從資料庫取得資料,並將其輸出為CSV檔案。文中詳細介紹了系統架構、程式實作,以及測試結果,並討論了未來可能的擴展。
Thumbnail
2025/03/16
這篇文章說明如何使用Spring JDBC Template從資料庫取得資料,並將其輸出為CSV檔案。文中詳細介紹了系統架構、程式實作,以及測試結果,並討論了未來可能的擴展。
Thumbnail
2025/03/15
本文比較IntelliJ IDEA、VSCode和Eclipse三種Java開發工具的優缺點,針對不同使用者族群提供建議。IntelliJ IDEA適合初學者,VSCode輕量且具彈性,Eclipse則適合舊專案開發。
Thumbnail
2025/03/15
本文比較IntelliJ IDEA、VSCode和Eclipse三種Java開發工具的優缺點,針對不同使用者族群提供建議。IntelliJ IDEA適合初學者,VSCode輕量且具彈性,Eclipse則適合舊專案開發。
Thumbnail
2025/02/21
本文介紹瞭如何在Windows系統中,透過設定.bashrc文件輕量級地配置JDK環境變數,解決不同專案使用不同JDK版本的問題,並涵蓋了環境變數的概念、用途及其他注意事項。
Thumbnail
2025/02/21
本文介紹瞭如何在Windows系統中,透過設定.bashrc文件輕量級地配置JDK環境變數,解決不同專案使用不同JDK版本的問題,並涵蓋了環境變數的概念、用途及其他注意事項。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
這篇文章的目的是對Java程式設計語言進行介紹,包括它的特性、應用範疇、主要使用者,以及相關的學習資源和常見的庫與框架。此外,它也提供了一些學習Java的渠道,以及與Java相關的其他知識。
Thumbnail
這篇文章的目的是對Java程式設計語言進行介紹,包括它的特性、應用範疇、主要使用者,以及相關的學習資源和常見的庫與框架。此外,它也提供了一些學習Java的渠道,以及與Java相關的其他知識。
Thumbnail
default methods 似乎也引起不小的討論,因為 default methods 加上可以實作多個介面,已經有點像 C++ 的多重繼承了,只差在沒辦法繼承成員變數而已,是好是壞就看怎麼使用了。我個人覺得還蠻方便的
Thumbnail
default methods 似乎也引起不小的討論,因為 default methods 加上可以實作多個介面,已經有點像 C++ 的多重繼承了,只差在沒辦法繼承成員變數而已,是好是壞就看怎麼使用了。我個人覺得還蠻方便的
Thumbnail
寫程式,從Hello, World!開始~ 歡迎想學JAVA的人一起來進步吧!
Thumbnail
寫程式,從Hello, World!開始~ 歡迎想學JAVA的人一起來進步吧!
Thumbnail
萬事起頭 這個簡單到不行的極度簡略步驟,卻是一切的基礎
Thumbnail
萬事起頭 這個簡單到不行的極度簡略步驟,卻是一切的基礎
Thumbnail
int main()、註解//、include 、命名空間、using namespace
Thumbnail
int main()、註解//、include 、命名空間、using namespace
Thumbnail
現在,開始建立第一個檔案吧,一樣用最簡單的 Hello World 示範。 在 kotlin 資料夾按右鍵選擇 New 裡的 Kotlin File/Class 。 雖然有許多格式可以選,但其實只是 IDE 提供初始程式碼的差別,完全可以中途更改,我們這次選最基本的 File 格式就好。 命名檔案和
Thumbnail
現在,開始建立第一個檔案吧,一樣用最簡單的 Hello World 示範。 在 kotlin 資料夾按右鍵選擇 New 裡的 Kotlin File/Class 。 雖然有許多格式可以選,但其實只是 IDE 提供初始程式碼的差別,完全可以中途更改,我們這次選最基本的 File 格式就好。 命名檔案和
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News