java類的加載說明
- java類的編譯代碼都存在于它自己的獨立文件中(class),該文件只在需要使用程序代碼時才會被加載。
- 類加載在創建類的第一個對象時發生,但當訪問static域或static方法時,也會發生加載。
- 構造器也是static方法,盡管static關鍵字沒有顯式寫出,故可進一步說,類是在任何static成員被訪問時加載的。
示例說明加載過程
示例源于《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); } } //程序入口,執行代碼 public static void main(string[] args) { subclass subclass= new subclass(); } |
###執行結果
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 |
由結果得出類的加載過程與順序
- 如果一個類有父類,則父類會先被加載。static變量會優先被初始化執行,先初始化父類的super_x,再初始化子類的sub_b。
- 所有非靜態成員變量都會賦于一個默認值,如果是基本類型則為默認值,如果是對象引用則為null,這是通過將對象內存設為二進制零值而一舉生成的。
- 調用父類構造函數,但先不執行里面的代碼。父類的非靜態成員變量會被賦值,即是執行=號右邊內容,將9賦值給super_b.
- 執行父類的構造函數里的代碼。
- 子類的非靜態成員變量賦于默認值。
- 執行子類構造函數里的代碼。
加載過程流程圖
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。如果你想了解更多相關內容請查看下面相關鏈接
原文鏈接:https://blog.csdn.net/pigdreams/article/details/74907202