JAVA 靜態(tài)代碼,代碼塊,構(gòu)造方法的執(zhí)行順序

1.靜態(tài)代碼塊(Static Block)

靜態(tài)代碼塊在類加載時(shí)執(zhí)行,僅執(zhí)行一次,且在類加載時(shí)執(zhí)行一次。靜態(tài)代碼塊通常用于初始化靜態(tài)成員變量或執(zhí)行一些全局性的初始化操作。如果有多個(gè)靜態(tài)代碼塊,它們的執(zhí)行順序按照它們?cè)陬愔械捻樞驁?zhí)行。

public class MyClass {
    static {
        // 靜態(tài)代碼塊
    }
}

2.代碼塊(Instance Initialization Block)

代碼塊是在對(duì)象實(shí)例化時(shí)執(zhí)行的,每次創(chuàng)建對(duì)象時(shí)都會(huì)執(zhí)行。代碼塊通常用于初始化實(shí)例變量或執(zhí)行一些特定對(duì)象的初始化操作。如果有多個(gè)代碼塊,它們按照它們?cè)陬愔械捻樞驁?zhí)行,然后再執(zhí)行構(gòu)造方法。

public class MyClass {
    {
        // 代碼塊
    }
}

3.構(gòu)造方法(Constructor)

構(gòu)造方法是在對(duì)象實(shí)例化時(shí)執(zhí)行的,用于初始化對(duì)象的狀態(tài)。如果有多個(gè)構(gòu)造方法,根據(jù)你選擇的構(gòu)造方法來(lái)執(zhí)行相應(yīng)的構(gòu)造邏輯。

public class MyClass {

    public MyClass() {
        // 構(gòu)造方法
    }
}

執(zhí)行順序通常是先執(zhí)行靜態(tài)代碼塊,然后執(zhí)行代碼塊,最后執(zhí)行構(gòu)造方法。注意,如果有繼承關(guān)系,子類的構(gòu)造方法在執(zhí)行時(shí)會(huì)調(diào)用父類的構(gòu)造方法,從而可能會(huì)涉及到父類的靜態(tài)代碼塊、代碼塊和構(gòu)造方法的執(zhí)行。

示例:

public class MyClass {
    static {
        // 靜態(tài)代碼塊
    }

    {
        // 代碼塊
    }

    public MyClass() {
        // 構(gòu)造方法
    }
}

Demo

public class Example {
    static {
        System.out.println("Static Block");
    }

    {
        System.out.println("Instance Initialization Block");
    }

    public Example() {
        System.out.println("Constructor");
    }

    public static void main(String[] args) {
        System.out.println("Creating object 1:");
        Example obj1 = new Example();

        System.out.println("\nCreating object 2:");
        Example obj2 = new Example();
    }
}

當(dāng)運(yùn)行上面的代碼時(shí),輸出將如下所示:

Static Block
Creating object 1:
Instance Initialization Block
Constructor

Creating object 2:
Instance Initialization Block
Constructor

總結(jié)

靜態(tài)代碼塊在類加載時(shí)執(zhí)行一次,代碼塊在對(duì)象實(shí)例化時(shí)執(zhí)行,構(gòu)造方法也在對(duì)象實(shí)例化時(shí)執(zhí)行。這個(gè)順序?qū)τ诿總€(gè)對(duì)象的創(chuàng)建都是一樣的。

1.Static Block(靜態(tài)代碼塊):在類加載時(shí)執(zhí)行,僅執(zhí)行一次。在這個(gè)例子中,它在第一次創(chuàng)建對(duì)象之前執(zhí)行.

2.Instance Initialization Block(代碼塊):在對(duì)象實(shí)例化時(shí)執(zhí)行,每次創(chuàng)建對(duì)象時(shí)都會(huì)執(zhí)行。在這個(gè)例子中,它在構(gòu)造方法之前執(zhí)行,因此會(huì)在構(gòu)造方法之前打印出相應(yīng)的信息。

3.Constructor(構(gòu)造方法):在對(duì)象實(shí)例化時(shí)執(zhí)行,用于初始化對(duì)象的狀態(tài)。在這個(gè)例子中,構(gòu)造方法在代碼塊之后執(zhí)行。

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

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

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