您的位置:首頁>正文

沒有main方法真的不能執行代碼了嗎?

下面貼出代碼:

class InitialTest { public static void main(String[] args) { new InitialTest2(6); } int n=10; //step2 { n++; System.out.println("InitialTest..."+n); } static int x; static { x++; System.out.println("static..." +x); } } class InitialTest2 extends InitialTest{ InitialTest2(int a){ this.a=a; System.out.println("this.a=" + a ); } int a; { System.out.println("InitialTest2..."+this.a); } static { x++; System.out.println("static2..." +x); } }執行:
InitialTest
static...1 static2...2 InitialTest...11 InitialTest2...0 this.a=6 執行:
InitialTest2
static...1 static2...2 InitialTest...11 InitialTest2...0 this.a=6

於是乎查閱很多資料, 發現這種解釋相對靠譜:

實際上人家說“Java應用程式必須從main方法開始運行”這句話千真萬確, 不容置疑的。 那上面的例子如何解釋呢?

原因在於Java虛擬機器在執行InitialTest2的時候, 首先載入類, 然後執行內部的靜態塊, 執行完靜態塊後才去調用main方法。

可是, 在靜態塊中, System.exit(0)已經強制性的讓程式退出了, 而根本就沒機會調用main方法。 而且, InitialTest2是在靜態塊中輸出的, 這就給初學者一個錯覺。

繼續探究, 注釋了InitialTest類中main方法那一段, 看看還能不能執行;結果在eclipse中不能直接運行了。 。 。
繼續探究,
僅注釋InitialTest類中main方法中new InitialTest2(6)這一句;結果報錯了。 。 。 錯誤: 在類 InitialTest2 中找不到 main 方法, 請將 main 方法定義為: public static void main(String[] args)

繼續探究, 把檔案名改成InitialTest2.java(原檔案名為InitialTest.java) 直接cmd運行:

C:\Users\ProfessorRen>D: D:\>javac InitialTest2.java D:\>java InitialTest2 static...1 static2...2 InitialTest...11 InitialTest2...0 this.a=6 D:\>

接著上面繼續探究, 把main方法那一段注釋, 放在cmd下執行, 編譯通過, 但運行報錯了。 。 。

吃飯去, 有空繼續。 。 。 。 。 。
參考連結:http://lavasoft.blog.51cto.com/62575/106321/
同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示