首頁 > Java > java教程 > Java類別的初始化順序是什麼

Java類別的初始化順序是什麼

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2023-04-19 09:04:06
轉載
1483 人瀏覽過

Java類別的初始化順序

多說無益,以下是本人親自試驗的程式碼,一目了然:

 1 package test1;
 2 
 3 public class Test {
 4     public static void main(String[] argc) {
 5         new Child();
 6         System.out.println("================================");
 7         new Child();
 8     }
 9 }
10 
11 class Child extends Parent{
12     private static String staticField = getStaticField();
13     static {
14         System.out.println("child静态方法块初始化");
15     }
16     private String field = getField();
17     {
18         System.out.println("child普通方法块初始化");
19     }
20 
21     public Child() {
22         System.out.println("child构造函数初始化");
23     }
24 
25     public static String getStaticField() {
26         System.out.println("child静态属性初始化");
27         return "staticField";
28     }
29 
30     public static String getField() {
31         System.out.println("child普通属性初始化");
32         return "field";
33     }
34 }
35 
36 class Parent {
37     private static String staticField = getStaticField();
38     static {
39         System.out.println("parent静态方法块初始化");
40     }
41     private String field = getField();
42     {
43         System.out.println("parent普通方法块初始化");
44     }
45 
46     public Parent() {
47         System.out.println("parent构造函数初始化");
48     }
49 
50     public static String getStaticField() {
51         System.out.println("parent静态属性初始化");
52         return "staticField";
53     }
54 
55     public static String getField() {
56         System.out.println("parent普通属性初始化");
57         return "field";
58     }
59 }
登入後複製

列印結果:

 1 parent静态属性初始化
 2 parent静态方法块初始化
 3 child静态属性初始化
 4 child静态方法块初始化
 5 parent普通属性初始化
 6 parent普通方法块初始化
 7 parent构造函数初始化
 8 child普通属性初始化
 9 child普通方法块初始化
10 child构造函数初始化
11 ================================
12 parent普通属性初始化
13 parent普通方法块初始化
14 parent构造函数初始化
15 child普通属性初始化
16 child普通方法块初始化
17 child构造函数初始化
登入後複製

 經過取代靜態屬性和靜態初始化區塊的宣告順序發現靜態屬性和靜態初始化區塊的初始化順序和宣告順序有關,同理,普通屬性和普通初始化區塊的初始化順序和宣告順序有關。

總結:

  1. # 當某一個類別滿足初始化的條件時(以後的部落格中會有總結),先初始化父類別(從頂層父類別Object依序向下初始化),然後初始化子類別;

  2. 初始化該類別時,最先初始化靜態屬性和靜態初始化區塊(和宣告順序有關),從頂層父類別Object依序向下初始化;

  3. 透過new建立物件時,先初始化普通屬性和普通初始化區塊(和宣告順序有關),再呼叫建構方法,同樣從頂層父類別Object依序向下執行;

################################## 靜態屬性和靜態初始化區塊只會初始化一次,類別初始化後,再透過new建立對象,只會重複執行第三步。 ############   接下來引用Java程式設計思想的一句話:########## 在類別的內部,變數定義的先後順序決定了初始化的順序,即使變數定義散佈於方法定義之間,它們仍舊會在任何方法(包括建構器)被呼叫之前初始化。 ######

以上是Java類別的初始化順序是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
java可以做為web的後端嗎?
來自於 1970-01-01 08:00:00
0
0
0
安裝JAVA
來自於 1970-01-01 08:00:00
0
0
0
無法安裝java
來自於 1970-01-01 08:00:00
0
0
0
求救:JAVA加密的資料PHP解密
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板