close

(給ImportNew加星標,提高Java技能)

main方法能重載麼?
main方法能被其他方法調用麼?
main方法可以繼承麼?

阿里二面:main 方法可以繼承嗎?

昨天,微信群里一位網友,在群里發了自己面試阿里的過程。其中一個面試,他在群里 PUA 其他網友。這道面試題就是:Java 中的 main 方法可以繼承嗎?

我們一開始學習 Java 程序的時候,最先跑的一段代碼肯定是 main 方法,main 方法的格式如下:

publicstaticvoidmain(String[]args){}

那麼 main 方法有什麼特殊的地方呢?今天我們來簡單看一下。

首先針對 main 方法的格式定義:

「public」 :main 方法是啟動的時候由 JVM 進行加載的,public 的可訪問權限是最高的,所以需要聲明為 public;

「static」 :方法的調用要麼是通過對象,要麼是通過類,而 main 方法的話因為是由虛擬機調用的,所以無需生成對象,那麼聲明為 static 即可;

「main」 :至於為什麼方法名稱叫 main,我想應該是參考的是 C 語言的方法名吧;

「void」 :main 方法退出時,並沒有需要有相關返回值需要返回,所以是 void;

「String[]」 :此字符串數組用來運行時接受用戶輸入的參數;因為字符串在 Java 中是具有通用普遍性的,所以使用字符串是最優選擇;數組的話,因為我們的參數不止一個,所以數組肯定是合適的;

不過自 JDK1.5 引入動態參數後,String[]數組也可以使用String... args來實現。

publicstaticvoidmain(String...args){}

除了上面 JVM 規定的這個 main 方法比較特殊外,其他的 main 方法與普通的靜態方法是沒有什麼不同的。

main方法能重載麼?

這個是可以的,比如說我們給它重載一個方法:

publicclassMain{publicstaticvoidmain(Stringargs){System.out.println("helloworld:"+args);}publicstaticvoidmain(String[]args){main("test");}}

編譯運行,很顯然沒啥問題,除了 JVM 規定的作為應用程序入口的 main 方法之外,其他的 main 方法都是比較普通的方法。

main方法能被其他方法調用麼?publicclassMain{privatestaticinttimes=3;publicstaticvoidmain2(String[]args){times--;main(args);}publicstaticvoidmain(String[]args){System.out.println("main方法執行:"+times);if(times<=0){System.exit(0);}main2(args);}}

運行一下代碼,可以發現代碼能正常執行:

main方法執行:3main方法執行:2main方法執行:1main方法執行:0

所以說即使是作為應用程序入口的 main 方法,也是可以被其他方法調用的,但要注意程序的關閉方式,別陷入死循環了。

main方法可以繼承麼?

我們以前了解過,當類繼承時,子類可以繼承父類的方法和變量,那麼當父類定義了 main 方法,而子類沒有 main 方法時,能繼承父類的 main 方法,從而正常的運行程序麼?

publicclassMain{publicstaticvoidmain(String[]args){System.out.println("helloworld");}}

定義子類:

publicclassMain2extendsMain{}

這時候我們運行子類 Main2,可以發現,同樣打印了hello world,這說明 main 方法也是可以繼承的。那麼還有一種隱藏的情況也很顯然了,子類定義自己的 main 方法,隱藏掉父類中的實現,那麼這也是可以的。

publicclassMain2extendsMain{publicstaticvoidmain(String[]args){System.out.println("helloworldMain2");}}

這時候就會打印子類自己的內容了:hello world Main2。

這麼來看,除了main方法作為應用程序的入口比較特殊外,其他情況下與正常的靜態方法是沒什麼區別的。

轉自:網絡

- EOF -

推薦閱讀點擊標題可跳轉

精妙絕倫的並發藝術品 — ConcurrentHashMap是如何保證線程安全的

一個 HashMap 跟面試官扯了半個小時

看完本文有收穫?請轉發分享給更多人

關注「ImportNew」,提升Java技能

點讚和在看就是最大的支持❤️

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()