爲什麼 main 方法是 public static void ?

寫在前面: 我是 揚帆向海,這個暱稱來源於我的名字以及女朋友的名字。我熱愛技術、熱愛開源、熱愛編程。技術是開源的、知識是共享的

這博客是對自己學習的一點點總結及記錄,如果您對 Java算法 感興趣,可以關注我的動態,我們一起學習。

用知識改變命運,讓我們的家人過上更好的生活


main 方法是我們學習Java編程語言時知道的第一個方法,你是否曾經想過爲什麼 main 方法是 public、static、void 的。當然,很多人首先學的是C和C++,但是在Java中main方法與前者有些細微的不同,它不會返回任何值,爲什麼 main 方法是 public、static、void,這篇文章嘗試去找到一些答案。

mian 方法是Java程序的入口,記住,我們這裏不會討論Servlet、MIDlet和其他任何容器管理的java程序,在java核心編程中,JVM會查找類中的 public static void main(String[]args),如果找不到該方法就拋出錯誤NoSuchMethodError:main 程序終止。

main 方法必須嚴格遵循它的語法規則,方法簽名必須是 public static void,參數是字符串數組類型,如果是Java1.5及以後的版本還可以使用可變參數:

public static void main(String... args)

1、爲什麼main方法是靜態的(static)

  • 正因爲main方法是靜態的,JVM調用這個方法就不需要創建任何包含這個main方法的實例。

  • 因爲C和C++同樣有類似的main方法作爲程序執行的入口。

  • 如果main方法不聲明爲靜態的,JVM就必須創建main類的實例,因爲構造器可以被重載,JVM就沒法確定調用哪個main方法。

  • 靜態方法和靜態數據加載到內存就可以直接調用而不需要像實例方法一樣創建實例後才能調用,如果main方法是靜態的,那麼它就會被加載到JVM上下文中成爲可執行的方法。

2、爲什麼main方法是公有的(public)

Java指定了一些可訪問的修飾符如:private、protected、public,任何方法或變量都可以聲明爲public,Java可以從該類之外的地方訪問。因爲main方法是公共的,JVM就可以輕鬆的訪問執行它。

3、爲什麼main方法沒有返回值(Void)

因爲main返回任何值對程序都沒任何意義,所以設計成void,意味着main不會有任何值返回。

4、總結

  • main方法必須聲明爲public、static、void,否則JVM沒法運行程序

  • 如果JVM找不到main方法就拋出NoSuchMethodError:main異常,例如:如果你運行命令:java HelloWrold,JVM就會在HelloWorld.class文件中搜索public static void main (String[] args) 方法。

  • main方法是程序的入口,程序執行的開始處。

  • main方法被一個特定的線程”main”運行,程序會一直運行直到main線程結束或者non-daemon線程終止。

  • 當你看到“Exception in Thread main”如:Excpetion in Thread main:Java.lang.NullPointedException ,意味着異常來自於main線程。

  • 你可以聲明main方法使用java1.5的可變參數的方式如:
    public static void main(String... args)

  • 除了static、void、和public,你可以使用finalsynchronized、和strictfp修飾符在main方法的簽名中,如:
    public strictfp final synchronized static void main(String[] args)

  • main方法在Java可以像其他方法一樣被重載,但是JVM只會調用上面這種簽名規範的main方法。

  • 你可以使用throws子句在方法簽名中,可以拋出任何checked和unchecked異常。

  • 靜態初始化塊在JVM調用main方法前被執行,它們在類被JVM加載到內存的時候就被執行了。

發佈了89 篇原創文章 · 獲贊 2181 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章