ホームページ >Java >&#&チュートリアル >Java の静的ブロックとインスタンス初期化ブロックの実行順序は何ですか?

Java の静的ブロックとインスタンス初期化ブロックの実行順序は何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-24 08:28:09875ブラウズ

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

Java の static ブロックと Instance Initializer ブロックの実行順序

Java クラスを操作する場合、static ブロックとインスタンス初期化ブロックの実行順序を理解することが重要です。インスタンス初期化ブロックが実行されます。これらのブロックは、初期値の割り当て、クラスおよびオブジェクト メンバーの初期化などの重要な操作を実行します。

インスタンス初期化ブロック

中括弧 { } で囲まれたインスタンス初期化ブロックが実行されます。クラスのインスタンスが作成されるたびに。これらは、クラス内のコードに出現する順序で実行されます。この動作はすべてのクラスで一貫しています。

静的イニシャライザ ブロック

静的イニシャライザ ブロックも中括弧 { } で囲まれ、前に 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

これは、静的初期化ブロックが親 -> の順序で実行されることを示しています。 subclass.

例外

このルールには注目すべき例外が 1 つあります。親クラスが決して参照されないクラスを定義している場合、その静的初期化ブロックは実行されません。これは、クラスローダーが明示的に必要なクラスのみを初期化するためです。

以上がJava の静的ブロックとインスタンス初期化ブロックの実行順序は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。