類初始化順序執行結果

2021-07-24 22:41:49 字數 996 閱讀 6854

以下程式執行結果是:

class

y x x = new

x();

static

static

int i = 11;

static

}class

x

static

static

int i = 1;

static

}public

class z extends

y

public

z()

x x = new

x();

static

static

int i = 111;

static

}

輸出結果:

y類的靜態**塊初始化

y類的靜態**塊初始化,且靜態變數i的值是:22

z類的靜態**塊初始化

z類的靜態**塊初始化,且靜態變數i的值是:222

x類的靜態**塊初始化

x類的靜態**塊初始化,且靜態變數i的值是:2

x的構造**塊

x的構造方法

y的構造**塊

y的構造方法

x的構造**塊

x的構造方法

z的構造**塊

z的構造方法

初始化過程: 

1. 初始化父類中的靜態成員變數和靜態**塊(靜態成員變數和靜態**塊兩者按在類中宣告的先後順序順序執行) ; 

2. 初始化子類中的靜態成員變數和靜態**塊(靜態成員變數和靜態**塊兩者按在類中宣告的先後順序順序執行) ; 

3.初始化父類的普通成員變數和**塊,再執行父類的構造方法(其中被執行的父類構造方法和子類構造方法引數數量型別一致,普通成員變數和**塊兩者按在類中宣告的先後順序順序執行),;

4.初始化子類的普通成員變數和**塊,再執行子類的構造方法(普通成員變數和**塊兩者按在類中宣告的先後順序順序執行); 

**:

類初始化順序

類初始化時,jvm會先初始化所有 1,靜態屬性,靜態例項,靜態塊。2.新建例項 靜態或非靜態 時會先執行所有非靜態屬性和構造塊 非靜態屬性和構造塊執行級別相同,誰前誰先 然後構造方法。注意 1 靜態 塊不能存在於任何方法體內。2 靜態 塊不能直接訪問靜態例項變數和例項方法,需要通過類的例項物件來訪問...

類初始化順序

類初始化順序 1.靜態構造塊最先執行,並只執行一次 2.成員變數執行,但靜態成員變數早於靜態塊執行 3.構造塊從上至下依次執行 4.構造方法執行 父類早於子類 父類靜態構造塊 子類靜態構造塊 父類成員變數 父類構造塊 父類構造方法 子類成員變數 子類構造塊 子類構造方法 靜態成員變數先於靜態塊執行 ...

類的初始化的執行順序

類的靜態屬性 類的靜態 模組 類的非靜態屬性 類的非靜態 塊 構造方法 父類的靜態屬性 父類的靜態 塊 子類的靜態屬性 子類的靜態 塊 父類的非靜態屬性 父類的非靜態 塊 父類構造方法 子類非靜態屬性 子類非靜態 塊 10.子類構造方法 class singleton static public c...