1. gzyueqian
      18529173453

      面試問題答疑:為什么 Java 的 main 方法必須是 public static void?

      更新時間: 2020-10-09 17:26:49來源: 粵嵌教育瀏覽量:13496

             學習Java的過程中,你是不是曾經(jīng)思考過為什么main 方法是 public、static、void 的。很多粵嵌學員在面試反饋中也提高,有些面試官會在技術面的時候提到這個問題,讓你給出答案。


            Java 中 main 方法與前者有些細微的不同,它不會返回任何值,為什么 main 方式是public、static、void,這篇文章嘗試去找到一些答案。


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


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


        public static void main(String... args)


        為什么 main 方法是靜態(tài)的(static)?


        1.正因為 main 方法是靜態(tài)的,JVM 調(diào)用這個方法就不需要創(chuàng)建任何包含這個 main 方法的實例。


        2.因為 C 和 C++ 同樣有類似的 main 方法作為程序執(zhí)行的入口。


        3.如果 main 方法不聲明為靜態(tài)的,JVM 就必須創(chuàng)建 main 類的實例,因為構(gòu)造器可以被重載,JVM 就沒法確定調(diào)用哪個 main 方法。


        4.靜態(tài)方法和靜態(tài)數(shù)據(jù)加載到內(nèi)存就可以直接調(diào)用而不需要像實例方法一樣創(chuàng)建實例后才能調(diào)用,如果 main 方法是靜態(tài)的,那么它就會被加載到 JVM 上下文中成為可執(zhí)行的方法。


        為什么main方法是公有的(public) ?


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


        為什么 main 方法沒有返回值(Void)?


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


        總結(jié)


        1.main 方法必須聲明為 public、static、void,否則 JVM 沒法運行程序 。


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


        3.main 方式是程序的入口,程序執(zhí)行的開始處。


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


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


        6.你可以聲明 main 方法使用 java1.5 的可變參數(shù)的方式如:publicstaticvoid main(String... args)。


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


        8.main 方法在 Java 可以像其他方法一樣被重載,但是 JVM 只會調(diào)用上面這種簽名規(guī)范的 main 方法。


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


        10.靜態(tài)初始化塊在 JVM 調(diào)用 main 方法前被執(zhí)行,它們在類被 JVM 加載到內(nèi)存的時候就被執(zhí)行了。


        更多面試問題答疑,來找小粵要答案吧。粵嵌IT培訓班,全力以赴幫助你贏在面試,拿下高薪。


      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲综合色国产综合 | 亚洲人成影院在线播放高清 | 最新AV网站在线看 | 亚洲熟女综合色一区二区三区 | 又黄又爽免费国产视频 | 亚洲色欧美在线影院性色 |