1. 程式人生 > >類與接口初始化順序

類與接口初始化順序

類與接口初始化順序

一.類初始化順序:

(Super的靜態變量和Super的靜態塊)->(Sub的靜態塊和Sub的靜態變量)->(Super的實例變量和Super的普通塊)->Super的構造器->(Sub的實例變量和Sub的普通塊)->Sub的構造器

括號中的順序是與在類中的書寫順序對應的,即誰寫前面誰就先初始化

二.類初始化條件(當且僅當以下四個條件之一發生類才會初始化)

  1. 遇到new getstatic putstatic invokestatic這四個指令時

  2. 使用reflect方法對類進行反射調用時

  3. 初始化一個類,如果其父類沒有進行過初始化,需先觸發父類初始化

  4. 虛擬機啟動,會先初始化主類

註:

  1. 類的靜態部分只初始化一次

  2. 通過數組定義引用類,不會觸發此類的初始化

  3. 引用常量不會引起定義常量的類的初始化

  4. 如果子類調用了父類中的靜態變量,那麽只父類初始化,子類不用初始化

二.接口初始化:

接口沒有靜態塊,只有靜態變量,如果引用了靜態變量,如果該變量屬於子類,則初始化子類,不要初始化父類,如果屬於父類,只初始化父類,不用初始化子類。



類與接口初始化順序