Java類加載初始化的過(guò)程及順序
Java類的加載說(shuō)明
- Java類的編譯代碼都存在于它自己的獨(dú)立文件中(class),該文件只在需要使用程序代碼時(shí)才會(huì)被加載。
- 類加載在創(chuàng)建類的第一個(gè)對(duì)象時(shí)發(fā)生,但當(dāng)訪問(wèn)static域或static方法時(shí),也會(huì)發(fā)生加載。
- 構(gòu)造器也是static方法,盡管static關(guān)鍵字沒(méi)有顯式寫出,故可進(jìn)一步說(shuō),類是在任何static成員被訪問(wèn)時(shí)加載的。
示例說(shuō)明加載過(guò)程
示例源于《Java編程思想》
//父類
public class SuperClass {
protected int super_a;
private int super_b=9;
protected static int super_x=printStr("SuperClass static init super_x");
public SuperClass(){
System.out.println("Super Class Constructor action.... ");
System.out.println("super_a="+super_a);
System.out.println("super_b="+super_b);
super_a=33;
}
static int printStr(String string){
System.out.println(string);
return 47;
}
}
//子類
public class SubClass extends SuperClass{
private static int sub_b=printStr("SubClass static init sub_b");
public SubClass(){
System.out.println("Sub Class Constructor action.... ");
System.out.println("Sub Class super_a="+super_a);
System.out.println("Sub Class sub_b="+sub_b);
}
}
//程序入口,執(zhí)行代碼
public static void main(String[] args) {
SubClass subClass=new SubClass();
}
###執(zhí)行結(jié)果
SuperClass static init super_x SubClass static init sub_b Super Class Constructor action.... super_a=0 super_b=9 Sub Class Constructor action.... Sub Class super_a=33 Sub Class sub_b=47
由結(jié)果得出類的加載過(guò)程與順序
- 如果一個(gè)類有父類,則父類會(huì)先被加載。Static變量會(huì)優(yōu)先被初始化執(zhí)行,先初始化父類的super_x,再初始化子類的sub_b。
- 所有非靜態(tài)成員變量都會(huì)賦于一個(gè)默認(rèn)值,如果是基本類型則為默認(rèn)值,如果是對(duì)象引用則為null,這是通過(guò)將對(duì)象內(nèi)存設(shè)為二進(jìn)制零值而一舉生成的。
- 調(diào)用父類構(gòu)造函數(shù),但先不執(zhí)行里面的代碼。父類的非靜態(tài)成員變量會(huì)被賦值,即是執(zhí)行=號(hào)右邊內(nèi)容,將9賦值給super_b.
- 執(zhí)行父類的構(gòu)造函數(shù)里的代碼。
- 子類的非靜態(tài)成員變量賦于默認(rèn)值。
- 執(zhí)行子類構(gòu)造函數(shù)里的代碼。
加載過(guò)程流程圖

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
新手了解java 類,對(duì)象以及封裝基礎(chǔ)知識(shí)
JS是一門面向?qū)ο笳Z(yǔ)言,其對(duì)象是用prototype屬性來(lái)模擬的,本文介紹了如何封裝JS對(duì)象,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧,希望對(duì)你有所幫助2021-07-07
JNDI簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了JNDI簡(jiǎn)介,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
微服務(wù)Spring Boot 整合 Redis 實(shí)現(xiàn)UV 數(shù)據(jù)統(tǒng)計(jì)的詳
這篇文章主要介紹了微服務(wù)Spring Boot 整合 Redis 實(shí)現(xiàn) UV 數(shù)據(jù)統(tǒng)計(jì),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01
解決日期轉(zhuǎn)化Json異常- Date JSON parse error
這篇文章主要介紹了解決日期轉(zhuǎn)化Json異常- Date JSON parse error問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
SpringBoot利用AOP實(shí)現(xiàn)一個(gè)日志管理詳解
目前有這么個(gè)問(wèn)題,有兩個(gè)系統(tǒng)CSP和OMS,這倆系統(tǒng)共用的是同一套日志操作:Log;目前想?yún)^(qū)分下這倆系統(tǒng)的日志操作,那沒(méi)辦法了,只能重寫一份Log的日志操作。本文就將利用AOP實(shí)現(xiàn)一個(gè)日志管理,需要的可以參考一下2022-09-09
java 教你如何給你的頭像添加一個(gè)好看的國(guó)旗
這篇文章主要介紹了java 教你如何給你的頭像添加一個(gè)好看的國(guó)旗,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
解決idea每次新建項(xiàng)目都需要重新指定maven目錄
這篇文章主要介紹了解決idea每次新建項(xiàng)目都需要配置maven,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
java實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的示例講解
下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的示例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
Java實(shí)現(xiàn)矩陣乘法以及優(yōu)化的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)矩陣乘法以及優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Idea中Springboot熱部署無(wú)效問(wèn)題解決
這篇文章主要介紹了Idea中Springboot熱部署無(wú)效問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11

