Java類中的初始化順序二

2021-07-02 16:21:08 字數 2318 閱讀 7388

public class father 

public father()

}

public class son extends father

public son()

public static void main(string args)

new son();

}}

結果:

執行父類靜態**塊前呼叫父類靜態成員變數(只能呼叫靜態變數):父類靜態變數

執行父類靜態**塊

執行父類靜態**塊後呼叫父類靜態成員變數(只能呼叫靜態變數):執行父類靜態**塊時給父類靜態變數賦值

-----------------------------------------

執行子類靜態**塊前呼叫子類靜態變數(只能呼叫靜態變數):子類靜態變數

執行子類靜態**塊

執行子類靜態**塊後呼叫子類靜態變數(只能呼叫靜態變數):執行子類靜態**塊時給靜態變數賦值

-----------------------------------------

執行子類普通**塊前呼叫子類靜態變數(只能呼叫靜態變數):執行子類靜態**塊時給靜態變數賦值

執行子類普通**塊

執行子類普通**塊後呼叫子類靜態變數(只能呼叫靜態變數):執行普通**時給子類靜態變數賦值

-----------------------------------------

父類構造**塊執行前呼叫父類靜態變數:執行父類靜態**塊時給父類靜態變數賦值

父類構造**塊執行前呼叫定義時賦值的父類例項變數:定義時給父類例項變數賦值

父類構造**塊執行前呼叫定義時未賦值的父類例項變數:null

執行父類構造**塊

父類構造**塊執行後呼叫父類靜態變數:執行父類構造**塊時給父類靜態變數賦值

父類構造**塊執行後呼叫定義時賦值的父類例項變數:執行父類構造**塊時給已賦值的父類例項變數賦值

父類構造**塊執行後呼叫定義時未賦值的父類例項變數:執行父類構造**塊時給未賦值的父類例項變數賦值

-----------------------------------------

父類構造方法執行前呼叫父類靜態變數:執行父類構造**塊時給父類靜態變數賦值

父類構造方法執行前呼叫定義時賦值的父類例項變數:執行父類構造**塊時給已賦值的父類例項變數賦值

父類構造方法執行前呼叫定義時未賦值的父類例項變數:執行父類構造**塊時給未賦值的父類例項變數賦值

執行父類構造方法

父類構造方法執行後呼叫父類靜態變數:執行父類構造方法時給父類靜態變數賦值

父類構造方法執行後呼叫定義時賦值的父類例項變數:執行父類構造方法時給已賦值的父類例項變數賦值

父類構造方法執行後呼叫定義時未賦值的父類例項變數:執行父類構造方法時給未賦值的父類例項變數賦值

-----------------------------------------

子類構造**塊執行前呼叫子類靜態變數:執行普通**時給子類靜態變數賦值

子類構造**塊執行前呼叫定義時賦值的子類例項變數:定義時給子類例項變數賦值

子類構造**塊執行前呼叫定義時未賦值的子類例項變數:null

執行子類構造**塊

子類構造**塊執行後呼叫子類靜態變數:子類執行構造**塊時給子類靜態變數賦值

子類構造**塊執行後呼叫定義時賦值的子類例項變數:子類執行構造**塊時時給已賦值的子類例項變數賦值

子類構造**塊執行後呼叫定義時未賦值的子類例項變數:子類執行構造**塊時時給未賦值的子類例項變數賦值

-----------------------------------------

子類構造方法執行前呼叫子類靜態變數:子類執行構造**塊時給子類靜態變數賦值

子類構造方法執行前呼叫定義時賦值的子類例項變數:子類執行構造**塊時時給已賦值的子類例項變數賦值

子類構造方法執行前呼叫定義時未賦值的子類例項變數:子類執行構造**塊時時給未賦值的子類例項變數賦值

執行子類構造方法

子類構造方法執行後呼叫子類靜態變數:子類執行構造方法時給子類靜態變數賦值

子類構造方法執行後呼叫定義時賦值的子類例項變數:子類執行構造方法時給已賦值的子類例項變數賦值

子類構造方法執行後呼叫定義時未賦值的子類例項變數:子類執行構造方法時給未賦值的子類例項變數賦值

-----------------------------------------

初始化順序:

父類靜態變數—–>父類靜態**塊—–>子類靜態變數—–>子類靜態**塊—–>子類普通**塊—–>父類構造**塊—–>父類構造方法—–>子類構造**塊—–>子類構造方法

Java中類初始化的順序

在建立物件時,物件所在類的所有資料成員會首先進行初始化,如果其中的成員變數有物件,那麼它們也會按照順序執行初始化工作。在所有類成員初始化完成後,才呼叫物件所在類的構造方法建立物件。構造方法作用就是初始化。靜態物件 變數 在非靜態物件前初始化。靜態物件 變數 只初始化一次,再次呼叫就不初始化了,但非靜...

Java中類的初始化順序

public class classinitordertest 成員變數 private string field member field 非靜態 塊 構造器 public classinitordertest public static void main string args 程式輸出結果 ...

Java類初始化順序

類的初始化順序 首先執行父類靜態的內容,父類靜態的內容執行完畢後,接著去執行子類的靜態的內容,當子類的靜態內容執行完畢之後,再去看父類有沒有非靜態 塊,如果有就執行父類的非靜態 塊,父類的非靜態 塊執行完畢,接著執行父類的構造方法 父類的構造方法執行完畢之後,它接著去看子類有沒有非靜態 塊,如果有就...