Java類加載初始化的過程及順序
Java類的加載說明
- Java類的編譯代碼都存在于它自己的獨(dú)立文件中(class),該文件只在需要使用程序代碼時才會被加載。
- 類加載在創(chuàng)建類的第一個對象時發(fā)生,但當(dāng)訪問static域或static方法時,也會發(fā)生加載。
- 構(gòu)造器也是static方法,盡管static關(guān)鍵字沒有顯式寫出,故可進(jìn)一步說,類是在任何static成員被訪問時加載的。
示例說明加載過程
示例源于《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é)果得出類的加載過程與順序
- 如果一個類有父類,則父類會先被加載。Static變量會優(yōu)先被初始化執(zhí)行,先初始化父類的super_x,再初始化子類的sub_b。
- 所有非靜態(tài)成員變量都會賦于一個默認(rèn)值,如果是基本類型則為默認(rèn)值,如果是對象引用則為null,這是通過將對象內(nèi)存設(shè)為二進(jìn)制零值而一舉生成的。
- 調(diào)用父類構(gòu)造函數(shù),但先不執(zhí)行里面的代碼。父類的非靜態(tài)成員變量會被賦值,即是執(zhí)行=號右邊內(nèi)容,將9賦值給super_b.
- 執(zhí)行父類的構(gòu)造函數(shù)里的代碼。
- 子類的非靜態(tài)成員變量賦于默認(rèn)值。
- 執(zhí)行子類構(gòu)造函數(shù)里的代碼。
加載過程流程圖

總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
JNDI簡介_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了JNDI簡介,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧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ì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-01-01
解決日期轉(zhuǎn)化Json異常- Date JSON parse error
這篇文章主要介紹了解決日期轉(zhuǎn)化Json異常- Date JSON parse error問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
SpringBoot利用AOP實(shí)現(xiàn)一個日志管理詳解
目前有這么個問題,有兩個系統(tǒng)CSP和OMS,這倆系統(tǒng)共用的是同一套日志操作:Log;目前想?yún)^(qū)分下這倆系統(tǒng)的日志操作,那沒辦法了,只能重寫一份Log的日志操作。本文就將利用AOP實(shí)現(xiàn)一個日志管理,需要的可以參考一下2022-09-09
解決idea每次新建項(xiàng)目都需要重新指定maven目錄
這篇文章主要介紹了解決idea每次新建項(xiàng)目都需要配置maven,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
java實(shí)現(xiàn)網(wǎng)頁爬蟲的示例講解
下面小編就為大家?guī)硪黄猨ava實(shí)現(xiàn)網(wǎng)頁爬蟲的示例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
Java實(shí)現(xiàn)矩陣乘法以及優(yōu)化的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)矩陣乘法以及優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

