Java代碼執(zhí)行順序

java中子類繼承父類程序執(zhí)行順序問題

Java中,new一個類的對象,類里面的靜態(tài)代碼塊、非靜態(tài)代碼、無參構(gòu)造方法、有參構(gòu)造方法、類的一般方法等部分,它們的執(zhí)行順序相對來說比較簡單,用程序也很容易驗證。比如新建一個測試父類。

public class FatherTest {

private String name;

FatherTest(){

System.out.println("--父類的無參構(gòu)造函數(shù)--");

}

FatherTest(String name){

this.name=name;

System.out.println("--父類的有參構(gòu)造函數(shù)--"+this.name);

}

static{

System.out.println("--父類的靜態(tài)代碼塊--");

}

{

System.out.println("--父類的非靜態(tài)代碼塊--");

}

public void speak(){

System.out.println("--父類的方法--");

}

}

加入一個main程序后

public static void main(String[] args) {

System.out.println("--父類主程序--");

FatherTest father=new FatherTest("父親的名字");

father.speak();

}

執(zhí)行結(jié)果為:

--父類的靜態(tài)代碼塊--

--父類主程序--

--父類的非靜態(tài)代碼塊--

--父類的有參構(gòu)造函數(shù)--父親的名字

--父類的方法—

可以很明顯的看出來執(zhí)行順序:靜態(tài)代碼塊—主程序—非靜態(tài)代碼塊—構(gòu)造函數(shù)—一般方法。

如果加入子類的繼承以后,情況就會變得復(fù)雜些。比如我們再新建一個測試子類。

public class SonTest extends FatherTest {

private String name;

static{

System.out.println("--子類的靜態(tài)代碼塊--");

}

{

System.out.println("--子類的非靜態(tài)代碼塊--");

}

SonTest(){

System.out.println("--子類的無參構(gòu)造函數(shù)--");

}

SonTest(String name){

this.name=name;

System.out.println("--子類的有參構(gòu)造函數(shù)--"+this.name);

}

@Override

public void speak(){

System.out.println("--子類Override了父類的方法--");

}?

}

然后再加入一個main函數(shù)

public static void main(String[] args) {

System.out.println("--子類主程序--");

FatherTest father=new FatherTest("父親的名字");

father.speak();

SonTest son=new SonTest("兒子的名字");

son.speak();

}

執(zhí)行結(jié)果為:

--父類的靜態(tài)代碼塊--

--子類的靜態(tài)代碼塊--

--子類主程序--

--父類的非靜態(tài)代碼塊--

--父類的有參構(gòu)造函數(shù)--父親的名字

--父類的方法--

--父類的非靜態(tài)代碼塊--

--父類的無參構(gòu)造函數(shù)--

--子類的非靜態(tài)代碼塊--

--子類的有參構(gòu)造函數(shù)--兒子的名字

--子類Override了父類的方法--

加入了子類以后,執(zhí)行順序有了新的變化,我們可以總結(jié)一下。首先第一部分執(zhí)行的是父類的靜態(tài)代碼塊—子類的靜態(tài)代碼塊—主程序。這一部分都是執(zhí)行一次,與建立多少對象沒有關(guān)系。第二部分new了一個父類對象,并調(diào)用了方法。執(zhí)行了它的非靜態(tài)代碼塊—構(gòu)造函數(shù)—一般方法。第三部分new了一個子類的對象,并調(diào)用了方法。執(zhí)行順序為父類的非靜態(tài)代碼塊—父類的無參構(gòu)造函數(shù),然后是子類的非靜態(tài)代碼塊—子類構(gòu)造函數(shù)—子類的方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 YY:Kitty,我最近在看Thinking in Java 這本書Kitty:喔?是么,你不是一直覺得那本...
    LilacZiyun閱讀 5,680評論 10 51
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,854評論 18 399
  • Number JavaScript不區(qū)分整數(shù)和浮點數(shù),統(tǒng)一用Number表示,以下都是合法的Number類型: N...
    簡明教程計劃閱讀 341評論 0 1
  • 我在護城河里 看到一條紅色的金魚 嬌小的身軀 拖著一襲白紗似的尾巴 如此骯臟的河水里 我竟然看到如此美麗的金魚 在...
    濤奶奶閱讀 276評論 0 3
  • 那年中考失利,距離省重點分?jǐn)?shù)線差了5分,出成績的當(dāng)天我把自己鎖在屋子里哭了一天,外面下了很大的雨,我,哭的很委屈。...
    莫加非閱讀 1,552評論 31 29

友情鏈接更多精彩內(nèi)容