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)文章
如何用Java實現(xiàn).env文件讀取敏感數(shù)據(jù)
這篇文章主要介紹了如何用Java實現(xiàn).env文件讀取敏感數(shù)據(jù),并提供了一個自動配置類EnvAutoConfiguration,common-env-starter-demo模塊展示了如何配置和啟動一個簡單的Spring Boot應用程序,需要的朋友可以參考下2025-02-02
Spring-AOP自動創(chuàng)建代理之BeanNameAutoProxyCreator實例
這篇文章主要介紹了Spring-AOP自動創(chuàng)建代理之BeanNameAutoProxyCreator實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Springboot整合ip2region實現(xiàn)用戶ip歸屬地獲取
ip2region是一個離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,提供了眾多主流編程語言的 xdb 數(shù)據(jù)生成和查詢客戶端實現(xiàn),下面我們來看看如何使用ip2region實現(xiàn)用戶ip歸屬地獲取吧2025-05-05
MyBatis中調(diào)用存儲過程和函數(shù)的實現(xiàn)示例
在MyBatis中調(diào)用存儲過程和函數(shù)是一個相對高級的特性,本文主要介紹了MyBatis中調(diào)用存儲過程和函數(shù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07
Java使用設(shè)計模式中的代理模式構(gòu)建項目的實例展示
這篇文章主要介紹了Java使用設(shè)計模式中的代理模式構(gòu)建項目的實例展示,代理模式中的代理對象可以在客戶端和目標對象之間起到中介的作用,需要的朋友可以參考下2016-05-05
java的arraylist排序示例(arraylist用法)
這篇文章主要介紹了java的arraylist排序示例,學習一下arraylist的用法,需要的朋友可以參考下2014-03-03

