物件的初始化順序

2021-10-09 23:07:54 字數 1438 閱讀 9225

由 static 關鍵字修飾的(如:類變數[靜態變數]、靜態**塊)將在類被初始化建立例項物件之前被初始化,而且是按順序從上到下依次被執行;

沒有 static 關鍵字修飾的(如:例項變數[非靜態變數]、非靜態**塊)初始化實際上是會被提取到類的構造器中被執行的,但是會比類構造器中的**塊優先執行到,其也是按順序從上到下依次被執行。

例如:

public

class

father

static

static

final string static_field_02 =

getfatherfield

("static_field_02");

static string getfatherfield

(string str)

private string field02 =

getmembe***therfield

("field01");

string getmembe***therfield

(string str)

static

class

sonextends

father

static

static

final string static_field_02 =

getsonfield

("static_field_02");

static string getsonfield

(string str)

private string field02 =

getmembersonfield

("field02");

string getmembersonfield

(string str)

}public

static

void

main

(string[

] args)

}

輸出:

父類靜態成員變數初始化-static_field_01

父類靜態**塊!

父類靜態成員變數初始化-static_field_02

子類靜態成員變數初始化-static_field_01

子類靜態**塊!

子類靜態成員變數初始化-static_field_02

父類靜態成員變數初始化-field01

父類**塊!

父類靜態成員變數初始化-field01

父類構造方法!

子類成員變數初始化-field01

子類**塊!

子類成員變數初始化-field02

子類構造方法!

總結:先初始化父類的靜態**—>初始化子類的靜態**–>初始化父類的非靜態**—>初始化父類建構函式—>初始化子類非靜態**—>初始化子類建構函式

物件的初始化順序

publicclass 初始化順序 static static public 初始化順序 publicstaticvoidmain string args 輸出結果為 靜態快1 靜態快2,非靜態快 1,非靜態快 2,構造方法 由上面這個類分析結果如下 1 乙個類中可以存在多個靜態塊與非靜態塊 2 多...

物件的初始化順序

publicclass 初始化順序 static static public 初始化順序 publicstaticvoidmain string args 輸出結果為 靜態快1 靜態快2,非靜態快 1,非靜態快 2,構造方法 由上面這個類分析結果如下 1 乙個類中可以存在多個靜態塊與非靜態塊 2 多...

c 物件初始化順序

c 物件初始化 1.先變數後建構函式。變數先被初始化 然後建構函式被執行 2.先靜態化後例項化。當乙個類被訪問時 靜態變數和建構函式最先被初始化 接著是物件的例項化變數和建構函式被初始化 3.先派生類後基類。對於變數和靜態建構函式 派生物件在基物件之前被初始化.比如 c類派生自b類 b類派生自a類 ...