Java 中欄位與建構函式程式碼的初始化順序
Java 程式中,欄位初始化與建構函式程式碼執行的順序可以令人困惑,尤其是關於兩者之間的優先順序。然而,Java 虛擬機器規格概述了確定正確順序的清晰事件順序:
-
靜態變數和區塊: 首先,靜態變數和靜態初始化區塊在文字順序,前提是它們的類別之前尚未初始化。
-
超級建構函式呼叫:接下來,在建構函式中明確或隱式執行 super() 呼叫。此呼叫呼叫父類別的建構子。
-
欄位初始化和區塊:在 super() 呼叫之後,實例變數以及任何關聯的實例初始化區塊將按文字順序初始化。
-
建構函式主體:最後,建構函式的剩餘主體在 super() 呼叫之後執行已完成。
在提供的程式碼片段中,由於指定的初始化順序而產生輸出「YZXZ」。讓我們一步步分解:
- 程式碼中不存在靜態初始化器和靜態變數。
- 執行建構函式呼叫 Z(),呼叫 Z 的超類別建構子 X( ) 隱式執行。
- 執行超類別建構子 X(),將「X」印到
- Z 類別中的實例變數 y 被初始化,並列印「Y」到控制台。
- X 類別中的實例變數 b 被初始化,列印「Z」到控制台console(因為 Z 是目前子類別)。
因此,輸出「YZXZ」正確反映了 Java Virtual 定義的初始化和執行順序機器規格。
以上是Java 中字段和建構函數的確切初始化順序是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!