java代碼沒有main方法也可以運行!

來源:互聯網
上載者:User
下面的代碼在cmd模式下通過javac命令編譯,java命令運行Hello world可以正常輸出。
public class  Test  {   static{          System.out.println("Hello World!");          System.exit(0);        }}

在網上看見了這段沒有main方法也可以執行的代碼的時候,為了弄清楚java中代碼的運行先後順序原因,寫了如下兩段測試代碼。

public class TestStatic {/* 靜態代碼塊 */static {System.out.println("我是靜態代碼快,我被執行了!");System.exit(0);//退出程式}/* 靜態方法 */public static void method() {System.out.println("我是靜態方法,我被調用執行了!");}/* 構造方法 */public TestStatic() {System.out.println("我是構造方法,我被執行了!");}/* 普通的方法 */public void fc() {System.out.println("我是普通的方法,我被調用執行了!");}public static void main(String[] args) {TestStatic d = new TestStatic();TestStatic.method();d.fc();}}

程式的輸出:我是靜態代碼快,我被執行了!

public class TestStatic {/* 靜態代碼塊 */static {System.out.println("我是靜態代碼快,我被執行了!");}/* 靜態方法 */public static void method() {System.out.println("我是靜態方法,我被調用執行了!");}/* 構造方法 */public TestStatic() {System.out.println("我是構造方法,我被執行了!");}/* 普通的方法 */public void fc() {System.out.println("我是普通的方法,我被調用執行了!");}public static void main(String[] args) {TestStatic d = new TestStatic();TestStatic.method();d.fc();}}

程式的輸出:

我是靜態代碼快,我被執行了!我是構造方法,我被執行了!我是靜態方法,我被調用執行了!我是普通的方法,我被調用執行了!
兩段代碼的輸出結果對比著看,第一行都是先輸出了類中靜態代碼快中的內容,第一段程式的靜態代碼塊中有一句System.exit(0)所以輸出"我是靜態代碼快,我被執行了!後程式會退出,第二段代碼沒有這句輸出了main方法中的內容,可以看出靜態代碼塊在main方法執行前執行了,第二段代碼運行完靜態代碼塊後接下來會去尋找main方法開始執行main方法中的內容,調用構造方法執行個體對象,然後對象去調用執行個體方法,由於靜態方法和執行個體方法都是被動的,需要調用才可以執行,所以誰先被調用誰就先運行,唯一不同的是靜態方法在類載入時就存在了,執行個體方法在new的時候才會產生,所以如果在執行個體對象前用類名去調靜態方法,正是因為這樣它還可以在構造方法調用前被調用。

【注】根據測試結果:最先啟動並執行是靜態代碼塊,靜態方法可以運行在執行個體方法前或者後也可以運行在構造方法的前或者後,但是構造方法一定運行在執行個體方法前面。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.