理解 Java 建構函式中的初始化順序
在 Java 中建構物件時,理解初始化的順序至關重要。出現了這個問題:「任何人都可以澄清以下程式的輸出嗎?」
程式碼:
class X { Y b = new Y(); X() { System.out.print("X"); } } class Y { Y() { System.out.print("Y"); } } public class Z extends X { Y y = new Y(); Z() { System.out.print("Z"); } public static void main(String[] args) { new Z(); } }
假設建構子在實例之前初始化,預期輸出為「XZYY」變數。然而,輸出實際上是“YYXZ”。這種偏差凸顯了理解實際初始化順序的重要性。
根據 Java 虛擬機器規範,初始化順序如下:
在這種情況下,不涉及靜態變數和區塊。 super() 呼叫隱式發生在類別 Z 的建構子中,因此在程式碼中不可見。因此,初始化順序為:
這解釋了輸出「YYXZ」。
以上是為什麼這個Java程式輸出「YYXZ」而不是「XZYY」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!