Java中類及方法的載入順序

2021-08-27 23:38:28 字數 1160 閱讀 5396

請執行下面**,檢視執行結果,並帶著問題,嘗試第二次debug程式。

class a 

public a() }

class b extends a

public b() }

public class box

}

執行結果:

由此,可以看出類中各成員初始化的順序是:

父類的靜態字段——>父類靜態**塊——>子類靜態字段——>子類靜態**塊——>父類成員變數(非靜態字段)——>父類非靜態**塊——>父類構造器——>子類成員變數——>子類非靜態**塊——>子類構造器

另外,在靜態**塊中不能訪問成員變數,想想這是為什麼?它是否與成員的初始化順序有必然的聯絡?

面試的時候遇到了這樣乙個問題:

class a 

public a()

public a(int n) }

class b extends a

public b()

public b(int n) }

public class classload

}

如上**,當呼叫了子類b的有參構造時,父類的構造器先執行肯定是確定無疑,但是是執行哪個構造器呢?執行結果如下:

執行結果中可以看到,父類a依然是執行了無參構造,也就是說,如果子類構造器中未顯式指定父類構造器,那麼將會預設執行父類的無參構造,此時,如果你過載了乙個父類的有參構造而沒有指定無參構造,那麼編譯將不會通過!!

例如錯誤**如下:

java中類的載入,及執行順序

類載入的順序 1 載入靜態成員 塊 靜態變數 靜態塊按書寫先後順序執行 先遞迴地載入父類的靜態成員 塊 object 的最先 再依次載入到本類的靜態成員。同乙個類裡的靜態成員 塊,按寫 的順序載入。如果其間呼叫靜態方法,則呼叫時會先執行靜態方法,再繼續載入。同乙個類裡呼叫靜態方法時,可以不理會寫 的...

java中類的載入順序

有條準則寫在前面 載入子類前必載入父類,例項化子類前必例項化父類。也就是說,載入的時候會執行靜態塊,其順序為 父類的靜態塊 子類的靜態塊 父類的構造方法 子類的構造方法 同時,宣告不會載入,例如在test類中,使用father f null,不會載入father類的,也就不會執行father類的靜態...

Java中類的載入順序總結

父類靜態物件和靜態 塊 子類靜態物件和靜態 塊 父類非靜態物件和非靜態 塊 父類建構函式 子類非靜態物件和非靜態 塊 子類建構函式 其中1和2中的靜態塊按照宣告順序依次執行,在類載入到方法區的時候執行的,不需要new類的例項,而且只需執行一次。而非靜態 塊是在建立物件時執行,執行順序為靜態塊 mai...