<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          今天終于搞懂了:為什么 Java 的 main 方法必須是 public static void?

          共 2144字,需瀏覽 5分鐘

           ·

          2020-09-19 08:48


          點(diǎn)擊上方“JAVA”,星標(biāo)公眾號(hào)

          重磅干貨,第一時(shí)間送達(dá)

          來源:suo.im/6v9d64

          • 為什么 main 方法是靜態(tài)的(static)?
          • 為什么main方法是公有的(public) ?
          • 為什么 main 方法沒有返回值(Void)?
          • 總結(jié)

          Main 方法是我們學(xué)習(xí) Java 編程語言時(shí)知道的第一個(gè)方法,你是否曾經(jīng)想過為什么 main 方法是 public、static、void 的。當(dāng)然,很多人首先學(xué)的是 C 和 C++,但是在 Java 中 main 方法與前者有些細(xì)微的不同,它不會(huì)返回任何值,為什么 main 方式是 public、static、void,這篇文章嘗試去找到一些答案。

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

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

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

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

          1.正因?yàn)?main 方法是靜態(tài)的,JVM 調(diào)用這個(gè)方法就不需要?jiǎng)?chuàng)建任何包含這個(gè) main 方法的實(shí)例。

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

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

          4.靜態(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)?main 方法是公共的,JVM 就可以輕松的訪問執(zhí)行它。

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

          因?yàn)?main 返回任何值對(duì)程序都沒任何意義,所以設(shè)計(jì)成 void,意味著 main 不會(huì)有任何值返回。

          總結(jié)

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

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

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

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

          5.當(dāng)你看到“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 只會(huì)調(diào)用上面這種簽名規(guī)范的 main 方法。

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

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


          更多精彩?


          在公眾號(hào)【程序員編程】對(duì)話框輸入以下關(guān)鍵詞
          查看更多優(yōu)質(zhì)內(nèi)容!

          大數(shù)據(jù)?|?Java?|?1024?|?電子書?|?速查表?
          Python進(jìn)階?|?面試?|?手冊(cè)?|?成神?|?思想?|?小程序
          命令行?|?人工智能?|?軟件測(cè)試?|?Web前端?|?Python

          掃碼關(guān)注我們

          獲取更多學(xué)習(xí)資料

          視頻 |?面試 |?技術(shù) | 電子書?

          瀏覽 63
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天色天天撸 | 大鸡吧视频在线观看 | 国内精自视频在线观看 | 免费鸡巴视频网站 | 欧美操逼视频黑人 |