首頁  >  文章  >  Java  >  Java 中靜態初始化區塊和實例初始化區塊的執行順序是什麼?

Java 中靜態初始化區塊和實例初始化區塊的執行順序是什麼?

Barbara Streisand
Barbara Streisand原創
2024-11-24 08:28:09859瀏覽

What's the Execution Order of Static and Instance Initializer Blocks in Java?

Java 中靜態初始化區塊和實例初始化區塊的執行順序

使用Java 類別時,必須了解靜態初始化區塊和實例初始化區塊的執行順序執行實例初始化區塊。這些區塊執行重要的操作,例如分配初始值以及初始化類別和物件成員。

實例初始化程式區塊

執行用大括號 { } 括起來的實例初始化程式區塊每次建立類別的實例時。它們按照它們在類別內程式碼中出現的順序執行。此行為在所有類別中都是一致的。

靜態初始化區塊

靜態初始化區塊也用花括號 { } 括起來,前面有 static 關鍵字,在下列情況下執行該類別已載入。它們不與任何特定實例關聯,並且僅執行一次,無論創建的實例數量如何。

特定執行順序

Java 語言規格(JLS)定義靜態初始化區塊的執行順序:

  1. 執行父類的靜態初始化塊首先。
  2. 接下來執行直接子類別的靜態初始化區塊。
  3. 遞歸地遵循此順序,直到所有子類別都執行了其靜態初始化區塊。

範例

考慮以下程式碼範例:

class Grandparent {
    static { System.out.println("Static - Grandparent"); }
}

class Parent extends Grandparent {
    static { System.out.println("Static - Parent"); }
}

class Child extends Parent {
    static { System.out.println("Static - Child"); }
}

執行main 方法時,會產生以下輸出:

Static - Grandparent
Static - Parent
Static - Child

這表示靜態初始化區塊按照父級-> 父級-> 的順序執行。子類別。

例外

此規則有一個值得注意的例外。如果父類定義了一個從未被引用的類,則其靜態初始化區塊將不會被執行。這是因為類別載入器僅初始化明確需要的類別。

以上是Java 中靜態初始化區塊和實例初始化區塊的執行順序是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn