Java類的初始化順序的實現(xiàn)
類初始化順序遵循以下三個原則(優(yōu)先級依次遞減)
1、靜態(tài)對象(變量)優(yōu)先于非靜態(tài)對象(變量)初始化,其中靜態(tài)對象(變量)只初始化一次,而非靜態(tài)對象(變量)可能會初始化多次;
2、父類優(yōu)先于子類初始化;
3、成員變量按照定義先后順序進行初始化;
例如:靜態(tài)變量、非靜態(tài)變量、靜態(tài)代碼塊、非靜態(tài)代碼塊、構(gòu)造函數(shù)、父類、子類等。
他們的初始化順序是:父類靜態(tài)變量 > 父類靜態(tài)代碼塊 > 子類靜態(tài)變量 > 子類靜態(tài)代碼塊 > 父類非靜態(tài)變量 > 父類非靜態(tài)代碼塊 > 父類構(gòu)造函數(shù) > 子類非靜態(tài)變量 > 子類非靜態(tài)代碼塊 > 子類構(gòu)造函數(shù)。
1.對于靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構(gòu)造器,它們的初始化順序是?
public class Test1 { // 靜態(tài)變量 public static String staticField = "靜態(tài)變量"; // 變量 public String field = "變量"; // 靜態(tài)初始化塊 static { System.out.println(staticField); System.out.println("靜態(tài)初始化塊"); } // 初始化塊 { System.out.println(field); System.out.println("初始化塊"); } // 構(gòu)造器 public Test1() { System.out.println("構(gòu)造器"); } public static void main(String[] args) { new Test1(); } }
執(zhí)行結(jié)果如下:
2.在繼承場景下,對于靜態(tài)變量、靜態(tài)初始化塊、變量、初始化塊、構(gòu)造器,它們的初始化順是?
class Parent { // 靜態(tài)變量 public static String p_StaticField = "父類--靜態(tài)變量"; // 變量 public String p_Field = "父類--變量"; // 靜態(tài)初始化塊 static { System.out.println(p_StaticField); System.out.println("父類--靜態(tài)初始化塊"); } // 初始化塊 { System.out.println(p_Field); System.out.println("父類--初始化塊"); } // 構(gòu)造器 public Parent() { System.out.println("父類--構(gòu)造器"); } } public class Test2 extends Parent { // 靜態(tài)變量 public static String s_StaticField = "子類--靜態(tài)變量"; // 變量 public String s_Field = "子類--變量"; // 靜態(tài)初始化塊 static { System.out.println(s_StaticField); System.out.println("子類--靜態(tài)初始化塊"); } // 初始化塊 { System.out.println(s_Field); System.out.println("子類--初始化塊"); } // 構(gòu)造器 public Test2() { System.out.println("子類--構(gòu)造器"); } // 程序入口 public static void main(String[] args) { new Test2(); } }
執(zhí)行結(jié)果如下:
3.靜態(tài)變量和靜態(tài)初始化塊之間、變量和初始化塊之間的先后順序又是怎樣呢?
public class Test3 { // 靜態(tài)變量 public static TestA a = new TestA(); // 靜態(tài)初始化塊 static { System.out.println("靜態(tài)初始化塊"); } // 靜態(tài)變量 public static TestB b = new TestB(); public static void main(String[] args) { new Test3(); } } class TestA { public TestA() { System.out.println("Test--A"); } } class TestB { public TestB() { System.out.println("Test--B"); } }
執(zhí)行結(jié)果如下:
到此這篇關(guān)于Java類的初始化順序的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java類初始化順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring boot里增加表單驗證hibernate-validator并在freemarker模板里顯示錯誤信息(推
這篇文章主要介紹了spring boot里增加表單驗證hibernate-validator并在freemarker模板里顯示錯誤信息的相關(guān)資料,需要的朋友可以參考下2018-01-01Java 實現(xiàn)倒計時功能(由秒計算天、小時、分鐘、秒)
最近做項目遇到這樣的需求,天、小時、分鐘、秒的數(shù)值都是隔開的,服務(wù)器端只返回一個時間戳長度,怎么實現(xiàn)這樣的功能呢?下面小編給大家?guī)砹薐ava 實現(xiàn)倒計時功能的方案,需要的朋友參考下吧2018-01-01Java中easypoi導入excel文件列名相同的處理方案
這篇文章主要介紹了Java中easypoi導入excel文件列名相同的處理方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06springboot如何開啟一個監(jiān)聽線程執(zhí)行任務(wù)
這篇文章主要介紹了springboot如何開啟一個監(jiān)聽線程執(zhí)行任務(wù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02