java類中元素初始化順序詳解
public class Test4 {
@Test
public void test(){
child child = new child();
}
}
class parent{
public static String parentStaticField = "父類靜態(tài)變量";
public String parentNormalField ="父類普通變量";
static {
System.out.println(parentStaticField);
System.out.println("父類靜態(tài)塊");
}
{
System.out.println(parentNormalField);
System.out.println("父類普通塊");
}
public parent(){
System.out.println("父類構(gòu)造方法");
}
}
class child extends parent{
public static String childStaticField = "子類靜態(tài)變量";
public String childNormalField ="子類普通變量";
static {
System.out.println(childStaticField);
System.out.println("子類靜態(tài)塊");
}
{
System.out.println(childNormalField);
System.out.println("子類普通塊");
}
public child(){
System.out.println("子類構(gòu)造方法");
}
}
輸出:
父類靜態(tài)變量
父類靜態(tài)塊
子類靜態(tài)變量
子類靜態(tài)塊
父類普通變量
父類普通塊
父類構(gòu)造方法
子類普通變量
子類普通塊
子類構(gòu)造方法
執(zhí)行過(guò)程:
1、當(dāng)執(zhí)行到new child時(shí),裝載器尋找已經(jīng)編譯的child類的代碼(也就是child.class文件)。在裝載的過(guò)程中,裝載器注意到它有一個(gè)基類,于是它再裝載基類。不管你創(chuàng)不創(chuàng)建基類對(duì)象,這個(gè)過(guò)程總會(huì)發(fā)生。如果基類還有基類,那么第二個(gè)基類也會(huì)被裝載,依此類推。
2、執(zhí)行根基類的static初始化,然后是下一個(gè)派生類的static初始化,依此類推。這個(gè)順序非常重要,因?yàn)榕缮惖摹皊tatic初始化”有可能要依賴基類成員的正確初始化。
3、當(dāng)所有必要的類都已經(jīng)裝載結(jié)束,創(chuàng)建child類對(duì)象。
4、child類存在父類,則調(diào)用父類的構(gòu)造函數(shù),可以使用super來(lái)指定調(diào)用哪個(gè)構(gòu)造函數(shù)。
基類的構(gòu)造過(guò)程以及構(gòu)造順序,同派生類的相同。首先基類中各個(gè)變量按照字面順序進(jìn)行初始化,然后執(zhí)行基類的構(gòu)造函數(shù)的其余部分。
5、對(duì)子類成員數(shù)據(jù)按照它們聲明的順序初始化,執(zhí)行子類構(gòu)造函數(shù)的其余部分。
相關(guān)文章
Java實(shí)現(xiàn)簡(jiǎn)單QQ聊天工具
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單QQ聊天工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09解決jpa查詢語(yǔ)句自動(dòng)變成了update的問(wèn)題
這篇文章主要介紹了解決jpa查詢語(yǔ)句自動(dòng)變成了update的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java黑盒測(cè)試之nextDate函數(shù)測(cè)試
這篇文章主要介紹了Java黑盒測(cè)試之nextDate函數(shù)測(cè)試,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Java黑盒測(cè)試的小伙伴們有很大的幫助哦,需要的朋友可以參考下2021-05-05SpringBoot項(xiàng)目集成Flyway詳細(xì)過(guò)程
今天帶大家學(xué)習(xí)SpringBoot項(xiàng)目集成Flyway詳細(xì)過(guò)程,文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05Spring boot 實(shí)現(xiàn)單個(gè)或批量文件上傳功能
這篇文章主要介紹了Spring boot 實(shí)現(xiàn)單個(gè)或批量文件上傳功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-08-08MyBatis-Generator的配置說(shuō)明和使用
本文主要介紹了MyBatis-Generator的配置說(shuō)明和使用的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02解決StringBuffer和StringBuilder的擴(kuò)容問(wèn)題
這篇文章主要介紹了解決StringBuffer和StringBuilder的擴(kuò)容問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07如何解決springboot讀取配置文件的中文亂碼問(wèn)題
本篇文章主要介紹了如何解決springboot讀取配置文件的中文亂碼問(wèn)題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看2018-05-05RestTemplate如何使用JSON發(fā)送Post請(qǐng)求
這篇文章主要介紹了RestTemplate如何使用JSON發(fā)送Post請(qǐng)求問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09