最近發現微信群里面有些群友在討論類的初始化順序,如類的靜態變數、成員變數、靜態代碼塊、非靜態代碼塊、構造器,及繼承父類時,它們的初始化順序都是怎樣的,下面我通過例子來說明這個情況,以免被人誤導,
示例1:測驗單類的初始化順序

程式輸出:
static field
static block
member field
non-static block
constructor
可以得出以下結論:
靜態變數 > 靜態初始塊 > 成員變數 > 非靜態初始塊 > 構造器
示例2:測驗類繼承的初始化順序

程式輸出:
parent static field
parent static block
child static field
child static block
parent member field
parent non-static block
parent constructor
child member field
child non-static block
child constructor
可以得出以下結論:
父類靜態變數 > 父類靜態初始塊 > 子類靜態變數 > 子類靜態初始塊 > 父類成員變數 > 父類非靜態初始塊 > 父類構造器 > 子類成員變數 > 子類非靜態初始塊 > 子類構造器
示例3:測驗成員變數、初始塊的初始化順序
從上面兩個例子可以看出,父類的靜態變數和靜態初始塊肯定是先于子類加載的,但同一個類中的靜態變數與靜態初始塊之間,成員變數與初始塊之間的順序一定是變數先于初始塊嗎?繼續演示!

程式輸出:
static field A
static block
static field B
可以得出以下結論:
靜態變數A > 靜態初始塊 > 靜態變數B
所以,它們的在類中的順序就決定了它們的初始化順序,而不是變數一定會優先于初始塊,
推薦去我的博客閱讀更多:
1.Java JVM、集合、多執行緒、新特性系列教程
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
4.Java、后端、架構、阿里巴巴等大廠最新面試題
覺得不錯,別忘了點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/162003.html
標籤:Java
上一篇:恕我直言你可能真的不會java第1篇:lambda運算式會用了么?
下一篇:Java--JDBC資料庫連接池
