真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java中代碼執(zhí)行順序-創(chuàng)新互聯(lián)

之前對于靜態(tài)代碼塊,構(gòu)造代碼塊,普通代碼塊,以及類的初始化等代碼執(zhí)行順序一直不是特別清楚,在此整理,方便復(fù)習(xí)!

十余年專注成都網(wǎng)站制作,成都企業(yè)網(wǎng)站定制,個人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都企業(yè)網(wǎng)站定制,高端網(wǎng)頁制作,對服務(wù)器托管等多個方面,擁有豐富的網(wǎng)站建設(shè)經(jīng)驗。

執(zhí)行順序:

  • 父類 -->子類
  • 靜態(tài)屬性&靜態(tài)代碼塊 -->普通屬性&構(gòu)造代碼塊-->構(gòu)造方法 -->普通代碼塊(所在方法被調(diào)用才執(zhí)行)

原因分析:

靜態(tài)代碼塊:

  1. 在java中使用static關(guān)鍵字聲明的代碼塊{}。
    static {
        System.out.println("靜態(tài)代碼塊");
    }
  2. 代碼級別:成員級別
  3. ==在類加載時執(zhí)行,且只執(zhí)行一次==
    (對于類加載不是很清楚的小伙伴們可先看這篇博客:類加載)
    class Parent {
    static {
        System.out.println("A");
    }
    Parent(){
        System.out.println("sdfsaf");
    }
    static {
        System.out.println("B");
    }
    }
    public class ExplicitStatic  {
    public static void main(String[] args) {
        new Parent();//第一次執(zhí)行,觸發(fā)了類加載
        System.out.println("=========華麗的分割線=========");
        new Parent();//第二次實例化,不再觸發(fā)類的加載,不再執(zhí)行靜態(tài)代碼塊
    }
    }

    運行結(jié)果:
    java中代碼執(zhí)行順序

構(gòu)造代碼塊:

  1. 直接在類中定義且沒有加static關(guān)鍵字的代碼塊稱為{}構(gòu)造代碼塊。
    public class Test01 {
    {
        System.out.println("我是構(gòu)造代碼塊");
    }
    public static void main(String[] args) {
        new Test01();
    }
    }
  2. 代碼級別:成員級別
  3. 構(gòu)造代碼塊在創(chuàng)建對象時被調(diào)用,每次創(chuàng)建對象都會被調(diào)用
  4. 構(gòu)造代碼塊的執(zhí)行次序優(yōu)先于類構(gòu)造方法
class Test02{
    {
        System.out.println("我是 父類 構(gòu)造代碼塊");
    }
}

public class Test01 extends Test02{

    {
        System.out.println("我是 子類 構(gòu)造代碼塊1");
    }

    Test01(){
        System.out.println("我是無參構(gòu)造方法");
    }
    Test01(int v){
        System.out.println("我是有參構(gòu)造方法");
    }

    static {
        System.out.println("靜態(tài)代碼塊");
    }

    {
        System.out.println("我是 子類 構(gòu)造代碼塊2");
    }
    public static void main(String[] args) {
        new Test01();
        System.out.println("===================華麗的分割線===================");
        new Test01(6);//每次創(chuàng)建對象都會執(zhí)行構(gòu)造代碼塊
    }
}

運行結(jié)果:
java中代碼執(zhí)行順序

普通代碼塊:

  1. 在方法或語句中出現(xiàn)的{}就稱為普通代碼塊。
    public void method() {
        {
            System.out.println("普通代碼塊1");
        }
        ....
    }
  2. 代碼級別:方法級別
  3. 普通代碼塊和一般的語句執(zhí)行順序由他們在代碼中出現(xiàn)的次序決定--“先出現(xiàn)先執(zhí)行”
class Test02{
    {
        System.out.println("我是 父類 構(gòu)造代碼塊");
    }
}

public class Test01 extends Test02{

    {
        System.out.println("我是 子類 構(gòu)造代碼塊");
    }

    static {
        System.out.println("靜態(tài)代碼塊");
    }

    public void method(){
        {
            System.out.println("普通代碼塊1");
        }

        System.out.println("普通方法體");

        {
            System.out.println("普通代碼塊2");
        }
    }
    public static void main(String[] args) {
        new Test01();
        System.out.println("===================華麗的分割線===================");
        new Test01().method();//被調(diào)用才會執(zhí)行方法中的代碼塊
    }
}

運行結(jié)果:
java中代碼執(zhí)行順序

類的實例化:

  1. 類的實例化有三部分:屬性,構(gòu)造代碼塊,構(gòu)造方法
  2. 屬性的加載和構(gòu)造代碼塊加載是同等級的,執(zhí)行順序為書寫順序
  3. 構(gòu)造方法在前兩種方式加載完之后再執(zhí)行

總結(jié):

對象實例化時的順序:

1,父類的靜態(tài)成員變量和靜態(tài)代碼塊加載

2,子類的靜態(tài)成員變量和靜態(tài)代碼塊加載

3,父類成員變量和構(gòu)造代碼塊加載

4,父類的構(gòu)造方法加載

5,子類成員變量和構(gòu)造代碼塊加載

6,子類的構(gòu)造方法加載

知識點匯總 ,測試源碼如下:

class Parent2 {
    {
        System.out.println("父類  構(gòu)造代碼塊1");//5
    }

    Parent2() {
        System.out.println("父類  的無參構(gòu)造方法");//7
    }

    static {
        System.out.println("父類  的靜態(tài)代碼塊1");//1
    }

    {
        System.out.println("父類  構(gòu)造代碼塊2");//6
    }

    static {
        System.out.println("父類  的靜態(tài)代碼塊2");//2
    }
}

public class ExplicitStatic extends Parent2 {

    static {
        System.out.println("子類  的靜態(tài)代碼塊1");//3
    }

    ExplicitStatic() {//15
        super();//可省略
        System.out.println("子類  無參構(gòu)造方法");//16
    }

    ExplicitStatic(int v) {//14
        this();//即 執(zhí)行15
        System.out.println("子類  有參構(gòu)造方法");//17
    }

    private int initA() {
        System.out.println("子類  的屬性初始化調(diào)用 普通方法A");//9
        return 0;
    }

    static {
        System.out.println("子類  的靜態(tài)代碼塊2");//4
    }

    private int initB() {
        System.out.println("子類  的屬性初始化調(diào)用 普通方法B");//12
        return 0;
    }

    int a = initA();//8

    {
        System.out.println("子類  的構(gòu)造代碼塊1");//10
    }

    int b = initB();//11

    {
        System.out.println("子類  的構(gòu)造代碼塊2");//13
    }

    public void method() {
        {
            System.out.println("子類  的普通代碼塊1");
        }
        System.out.println("子類  的普通方法method");
        {
            System.out.println("子類  的普通代碼塊2");
        }
    }

    public static void main(String[] args) {
        new ExplicitStatic(100);
        System.out.println("=================");
        new ExplicitStatic().method();

}

運行結(jié)果如圖:

java中代碼執(zhí)行順序

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)站欄目:java中代碼執(zhí)行順序-創(chuàng)新互聯(lián)
瀏覽地址:http://weahome.cn/article/dgjsjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部