以下程式執行結果是:
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...