爲何 main 方法是 public static void?

0、引言:

以前在校招時,旁邊的面試官問過這樣一個問題:如何不在 main 函數裏打印出一行字符串呢(也不容許在main裏調用函數)? html

若是你不能回答上來不要緊,看了本文你就會有了答案。其實 main 函數咱們天天 coding 都會接觸,可是不必定每一個同窗都瞭解或注意到它爲何要這麼設計,爲何不能那麼寫? java

言 歸正傳,Main方法是咱們學習Java編程語言時知道的第一個方法,你是否曾經想過爲何 main 方法是 public、static、void 的?固然,不少人首先學的是C和C++,可是在Java中main方法與前者有些細微的不一樣,它不會返回任何值,爲何main方式是public、 static、void,這篇文章嘗試去找到一些答案。

Main 方法是Java程序的入口,記住,咱們這裏不會討論Servlet、MIDlet和其餘任何容器管理的java程序,在java核心編程中,JVM會查找 類中的public static void main(String[] args),若是找不到該方法就拋出錯誤NoSuchMethodError:main 程序終止。
Main方法必須嚴格遵循它的語法規則,方法簽名必須是public static void,參數是字符串數組類型,若是是Java1.5及之後的版本還可使用可變參數:
面試

1 public static void main(String... args)

一、爲何main方法是靜態的(static)

(1)正由於main方法是靜態的,JVM調用這個方法就不須要建立任何包含這個main方法的實例。
(2)由於C和C++一樣有相似的main方法做爲程序執行的入口。
(3)若是main方法不聲明爲靜態的,JVM就必須建立main類的實例,由於構造器能夠被重載,JVM就無法肯定調用哪一個main方法。
(4)靜態方法和靜態數據加載到內存就能夠直接調用而不須要像實例方法同樣建立實例後才能調用,若是main方法是靜態的,那麼它就會被加載到JVM上下文中成爲可執行的方法。
編程

二、爲何main方法是公有的(public)

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

三、爲何main方法沒有返回值(void)

由於main返回任何值對程序都沒任何意義,因此設計成void,意味着main不會有任何值返回
編程語言

四、總結

(1)main方法必須聲明爲public、static、void,不然JVM無法運行程序
(2) 若是JVM找不到main方法就拋出NoSuchMethodError:main異常,例如:若是你運行命令:java HelloWrold,JVM就會在HelloWorld.class文件中搜索public static void main (String[] args) 方法。
(3)main方式是程序的入口,程序執行的開始處。
(4)main方法被一個特定的線程」main」運行,程序會一直運行直到main線程結束或者non-daemon線程終止。
(5)當你看到「Exception in Thread main」如:Excpetion in Thread main:Java.lang.NullPointedException ,意味着異常來自於main線程
(6)你能夠聲明main方法使用java1.5的可變參數的方式如:
函數

1 public static void main(String... args)
(7)除了static、void、和public,你可使用final,synchronized、和strictfp修飾符在main方法的簽名中,如:
1 public strictfp final synchronized static void main(String[] args)
(8)main方法在Java能夠像其餘方法同樣被重載,可是JVM只會調用上面這種簽名規範的main方法。
(9)你可使用throws子句在方法簽名中,能夠拋出任何checked和unchecked異常
(10)靜態初始化塊在JVM調用main方法前被執行,它們在類被JVM加載到內存的時候就被執行了。

五、Refer:

Why main method is public static in Java 學習

http://javarevisited.blogspot.com/2011/12/main-public-static-java-void-method-why.htmlspa

相關文章
相關標籤/搜索