為什么main方法是靜態(tài)的(static)
正因?yàn)閙ain方法是靜態(tài)的卵惦,JVM調(diào)用這個(gè)方法就不需要?jiǎng)?chuàng)建任何包含這個(gè)main方法的實(shí)例棺克。
因?yàn)镃和C++同樣有類似的main方法作為程序執(zhí)行的入口卓鹿。
如果main方法不聲明為靜態(tài)的,JVM就必須創(chuàng)建main類的實(shí)例,因?yàn)闃?gòu)造器可以被重載,JVM就沒法確定調(diào)用哪個(gè)main方法粟判。
靜態(tài)方法和靜態(tài)數(shù)據(jù)加載到內(nèi)存就可以直接調(diào)用而不需要像實(shí)例方法一樣創(chuàng)建實(shí)例后才能調(diào)用,如果main方法是靜態(tài)的峦剔,那么它就會(huì)被加載到JVM上下文中成為可執(zhí)行的方法档礁。
為什么main方法是公有的(public)
Java指定了一些可訪問的修飾符如:private、protected吝沫、public呻澜,任何方法或變量都可以聲明為public,Java可以從該類之外的地方訪問惨险。因?yàn)閙ain方法是公共的羹幸,JVM就可以輕松的訪問執(zhí)行它。
為什么main方法沒有返回值(Void)
因?yàn)閙ain返回任何值對(duì)程序都沒任何意義辫愉,所以設(shè)計(jì)成void栅受,意味著main不會(huì)有任何值返回
main方法必須聲明為public、static恭朗、void屏镊,否則JVM沒法運(yùn)行程序
如果JVM找不到main方法就拋出NoSuchMethodError:main異常,例如:如果你運(yùn)行命令:java HelloWrold痰腮,JVM就會(huì)在HelloWorld.class文件中搜索public static void main (String[] args) 放法
main方式是程序的入口而芥,程序執(zhí)行的開始處。
main方法被一個(gè)特定的線程”main”運(yùn)行诽嘉,程序會(huì)一直運(yùn)行直到main線程結(jié)束或者non-daemon線程終止蔚出。
當(dāng)你看到“Exception in Thread main”如:Excpetion in Thread main:Java.lang.NullPointedException,意味著異常來自于main線程
你可以聲明main方法使用java1.5的可變參數(shù)的方式如:
publicstaticvoidmain(String... args)
除了static弟翘、void虫腋、和public,你可以使用final稀余,synchronized悦冀、和strictfp修飾符在main方法的簽名中,如:
publicstrictfpfinalsynchronizedstaticvoidmain(String[] args)
main方法在Java可以像其他方法一樣被重載睛琳,但是JVM只會(huì)調(diào)用上面這種簽名規(guī)范的main方法盒蟆。
你可以使用throws子句在方法簽名中,可以拋出任何checked和unchecked異常
靜態(tài)初始化塊在JVM調(diào)用main方法前被執(zhí)行师骗,它們?cè)陬惐籎VM加載到內(nèi)存的時(shí)候就被執(zhí)行了历等。