Java類加載初始化的過程及順序
更新時間:2018年12月24日 08:33:37 作者:pigdreams
今天小編就為大家分享一篇關(guān)于Java類加載初始化的過程及順序,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
Java類的加載說明
- Java類的編譯代碼都存在于它自己的獨立文件中(class),該文件只在需要使用程序代碼時才會被加載。
- 類加載在創(chuàng)建類的第一個對象時發(fā)生,但當訪問static域或static方法時,也會發(fā)生加載。
- 構(gòu)造器也是static方法,盡管static關(guā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)成員變量都會賦于一個默認值,如果是基本類型則為默認值,如果是對象引用則為null,這是通過將對象內(nèi)存設為二進制零值而一舉生成的。
- 調(diào)用父類構(gòu)造函數(shù),但先不執(zhí)行里面的代碼。父類的非靜態(tài)成員變量會被賦值,即是執(zhí)行=號右邊內(nèi)容,將9賦值給super_b.
- 執(zhí)行父類的構(gòu)造函數(shù)里的代碼。
- 子類的非靜態(tài)成員變量賦于默認值。
- 執(zhí)行子類構(gòu)造函數(shù)里的代碼。
加載過程流程圖

總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Java與WebUploader相結(jié)合實現(xiàn)文件上傳功能(實例代碼)
這篇文章主要介紹了Java結(jié)合WebUploader實現(xiàn)文件上傳功能,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03
為什么wait和notify必須放在synchronized中使用
這篇文章主要介紹了為什么wait和notify必須放在synchronized中使用,文章圍繞主題的相關(guān)問題展開詳細介紹,具有一定的參考價值,需要的小伙伴可以參考以參考一下2022-05-05
Java淺析代碼塊與構(gòu)造塊及靜態(tài)塊三者之間的關(guān)系
所謂代碼塊是指用"{}"括起來的一段代碼,根據(jù)其位置和聲明的不同,可以分為普通代碼塊、構(gòu)造塊、靜態(tài)塊、和同步代碼塊。如果在代碼塊前加上synchronized關(guān)鍵字,則此代碼塊就成為同步代碼塊2022-07-07
Spring?Boot?2.6.x整合Swagger啟動失敗報錯問題的完美解決辦法
這篇文章主要給大家介紹了關(guān)于Spring?Boot?2.6.x整合Swagger啟動失敗報錯問題的完美解決辦法,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-03-03

