java初始化順序

2021-07-30 12:02:35 字數 1644 閱讀 2867

屬性、方法、構造方法和自由塊都是類中的成員,在建立類的物件時,類中各成員的執行順序:

1.父類靜態成員和靜態初始化快,按在**中出現的順序依次執行。

2.子類靜態成員和靜態初始化塊,按在**中出現的順序依次執行。

3. 父類的例項成員和例項初始化塊,按在**中出現的順序依次執行。

4.執行父類的構造方法。

5.子類例項成員和例項初始化塊,按在**中出現的順序依次執行。

6.執行子類的構造方法。

public

class initialordertest    

// 初始化塊 

// 構造器 

public initialordertest()    

public

static

void main(string args)    

}  

執行以上**,我們會得到如下的輸出結果: 

靜態變數

靜態初始化塊

變數初始化塊

構造器

這與上文中說的完全符合。那麼對於繼承情況下又會怎樣呢?我們仍然以一段測試**來獲取最終結果: 

class parent    

// 初始化塊 

// 構造器 

public parent()    

}   

public

class subclass extends parent    

// 初始化塊 

// 構造器 

public subclass()    

// 程式入口 

public

static

void main(string args)    

}  

執行一下上面的**,結果馬上呈現在我們的眼前: 

父類--靜態變數

父類--靜態初始化塊

子類--靜態變數

子類--靜態初始化塊

父類--變數

父類--初始化塊

父類--構造器

子類--變數

子類--初始化塊

子類--構造器

現在,結果已經不言自明了。大家可能會注意到一點,那就是,並不是父類完全初始化完畢後才進行子類的初始化,實際上子類的靜態變數和靜態初始化塊的初始化是在父類的變數、初始化塊和構造器初始化之前就完成了。 

那麼對於靜態變數和靜態初始化塊之間、變數和初始化塊之間的先後順序又是怎樣呢?是否靜態變數總是先於靜態初始化塊,變數總是先於初始化塊就被初始化了呢?實際上這取決於它們在類中出現的先後順序。我們以靜態變數和靜態初始化塊為例來進行說明。 

同樣,我們還是寫乙個類來進行測試: 

public

class testorder    

// 靜態變數 

public

static testb b = new testb();   

public

static

void main(string args)    

}   

class testa    

}   

class testb    

}  

執行上面的**,會得到如下的結果: 

test--a

靜態初始化塊

test--b

java初始化順序

1 父類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 2 子類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 3 父類例項成員和例項初始化塊 按在 中出現的順序依次執行 4 父類構造方法 5 子類例項成員和例項初始化塊 按在 中出現的順序依次執行 6 子類構造方法 public abstr...

java初始化順序

例如以下 package chapter5 public class demo1one public void printinfo public static void main string args 程式一開始先執行 private static string password 0721 這行 ...

JAVA初始化順序

1 當使用新建物件例項或者呼叫靜態成員變數或者方法時,初始化靜態變數 2 靜態變數在初始化時在前面的先初始化,靜態塊和靜態變數相同對待 在初始化過程中,有新建物件例項的時候,暫時停止後面的靜態變數初始化 3 靜態變數沒有初始化時,使用預設的初始值 如int為0 4 新建物件例項,對非靜態的成員變數進...