java類的加載說明
- java類的編譯代碼都存在于它自己的獨(dú)立文件中(class),該文件只在需要使用程序代碼時(shí)才會(huì)被加載。
- 類加載在創(chuàng)建類的第一個(gè)對(duì)象時(shí)發(fā)生,但當(dāng)訪問static域或static方法時(shí),也會(huì)發(fā)生加載。
- 構(gòu)造器也是static方法,盡管static關(guān)鍵字沒有顯式寫出,故可進(jìn)一步說,類是在任何static成員被訪問時(shí)加載的。
示例說明加載過程
示例源于《java編程思想》
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
//父類 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é)果
1
2
3
4
5
6
7
8
|
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é)果得出類的加載過程與順序
- 如果一個(gè)類有父類,則父類會(huì)先被加載。static變量會(huì)優(yōu)先被初始化執(zhí)行,先初始化父類的super_x,再初始化子類的sub_b。
- 所有非靜態(tài)成員變量都會(huì)賦于一個(gè)默認(rèn)值,如果是基本類型則為默認(rèn)值,如果是對(duì)象引用則為null,這是通過將對(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ù)里的代碼。
加載過程流程圖
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)服務(wù)器之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
原文鏈接:https://blog.csdn.net/pigdreams/article/details/74907202