溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

一文讓你徹底搞懂Java程序的初始化順序

發(fā)布時間:2020-06-22 03:38:02 來源:網(wǎng)絡(luò) 閱讀:240 作者:wx5d9ed7c8443c3 欄目:編程語言

使用場景

在Java程序中,當實例化對象時,對象的所在類的所有成員變量首先要進行初始化,只有當所有類成員完成初始化后,才會調(diào)用對象所在類的構(gòu)造函數(shù)創(chuàng)建對象。

原則

  1. 變量優(yōu)先于塊、靜態(tài)優(yōu)先于非靜態(tài)。
  2. 父類優(yōu)先于派生類初始化。
  3. 按照成員變量定義的順序來進行初始化,即使變量定義散布于方法定義之中,它們?nèi)匀辉谌魏畏椒ǎò?gòu)造器)被調(diào)用前初始化。

初始化順序

  • 父類靜態(tài)變量
  • 父類靜態(tài)代碼塊
  • 子類靜態(tài)變量
  • 子類靜態(tài)代碼塊
  • 父類非靜態(tài)變量
  • 父類非靜態(tài)代碼塊
  • 父類構(gòu)造函數(shù)
  • 子類非靜態(tài)變量
  • 子類非靜態(tài)代碼塊
  • 子類構(gòu)造函數(shù)

初始化示例代碼


class Base {

    public Base() {
        System.out.println("父類構(gòu)造方法");
    }

    String b = "父類非靜態(tài)變量";
    {
        System.out.println(b);
        System.out.println("父類非靜態(tài)代碼塊");
    }

    static String a = "父類靜態(tài)變量";

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

    public static void A() {
        System.out.println("父類普通靜態(tài)方法");
    }

}

class Derived extends Base {

    public Derived() {
        System.out.println("子類構(gòu)造器");
    }

    String b = "子類非靜態(tài)變量";
    {
        System.out.println(b);
        System.out.println("子類非靜態(tài)代碼塊");
    }

    static String a = "子類靜態(tài)變量";

    static {
        System.out.println(a);
        System.out.println("子類靜態(tài)塊");
    }

    public static void A() {
        System.out.println("子類普通靜態(tài)方法");
    }

    public static void main(String[] args) {
        Base.A();
        Derived.A();
        new Derived();
    }
}

分別執(zhí)行主函數(shù)里的三條指令,執(zhí)行結(jié)果如下。

Base.A()

  • 父類靜態(tài)變量
  • 父類靜態(tài)代碼塊
  • 子類靜態(tài)變量
  • 子類靜態(tài)塊
  • 父類普通靜態(tài)方法

Derived.A()

  • 父類靜態(tài)變量
  • 父類靜態(tài)代碼塊
  • 子類靜態(tài)變量
  • 子類靜態(tài)塊
  • 子類普通靜態(tài)方法

new Derived()

  • 父類靜態(tài)變量
  • 父類靜態(tài)代碼塊
  • 子類靜態(tài)變量
  • 子類靜態(tài)代碼塊
  • 父類非靜態(tài)變量
  • 父類非靜態(tài)代碼塊
  • 父類構(gòu)造函數(shù)
  • 子類非靜態(tài)變量
  • 子類非靜態(tài)代碼塊
  • 子類構(gòu)造函數(shù)
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI