當前位置:
首頁 > 知識 > 沒有main方法真的不能執行代碼了嗎?

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

今天看北大慕課遇到一段代碼,於是下載下來跑了一下,奇葩的是,沒有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:UsersProfessorRen>D:

D:>javac InitialTest2.java

D:>java InitialTest2
static...1
static2...2
InitialTest...11
InitialTest2...0
this.a=6

D:>

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

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

吃飯去,有空繼續。。。。。。
參考鏈接:http://lavasoft.blog.51cto.com/62575/106321/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

vue-router路由參數刷新消失的問題
網頁標題(title)動態改變
「Open Source」負載均衡之Nginx
python_adb 圖形界面獲取app測試數據,並展示部分測試報告v1.0版本
Java國際化之(五)——自定義國際化formatter註解實現

TAG:達人科技 |

您可能感興趣

還在用不吃主食的方法減肥?你真的out了!
不用整容也能瘦臉的方法,你不打算get一下嗎?
如何讓你的代碼沒有Bug?GitHub排名第一的項目提出了一勞永逸的方法
iPhone電池無處換?蘋果想了個新方法
如果你學會了這些抗皺方法,從此和皺紋說goodbye!
如何讓代碼沒有Bug?GitHub排名第一的項目提出了一勞永逸的方法
你的iphone電池為什麼不耐用?我教你正確使用方法
抽脂真的可以減肥嗎?別再想這些不合實際的方法了
啟動Python的方法有哪些?
想要不節食就能瘦的方法?嘿,還真有。
真的有永不反彈的減肥方法嗎?
不越獄輕鬆隱藏iPhone照片的方法!
Python如何切入量子計算?ProjectQ或許是個好方法!
最流行的十種職稱複習方法,不知道你就out了
有沒有能夠根除狐臭的辦法呢?最有效的去狐臭方法是什麼呢
堅持一個月,還只能跑1km?這可能是你的方法不正確!
有什麼方法可以真的緩解痛經嗎?
解酒最快的方法!你get到了嗎?
不知道WiFi密碼的情況下怎麼蹭網呢?教你兩種最簡單的方法
確定細胞何時具有「cdna」RNA「檢查」由活性基因寫入的方法