ホームページ >Java >&#&チュートリアル >Java では静的ブロックとインスタンス初期化ブロックはどのように順序付けされますか?

Java では静的ブロックとインスタンス初期化ブロックはどのように順序付けされますか?

DDD
DDDオリジナル
2024-11-29 06:32:20210ブラウズ

How are Static and Instance Initializer Blocks Ordered in Java?

Java における静的初期化ブロックとインスタンス初期化ブロックの初期化順序

Java は、静的ブロックとインスタンス初期化ブロックを特定の順序で初期化し、正しい読み込みを保証します。そして授業の実行。この順序は、依存関係とリソース割り当てを管理するために重要です。

静的初期化子

Java は、そのクラスまたはそのクラスの静的メンバーが存在する場合にのみ、クラスの静的初期化子ブロックを初期化します。が初めて使われます。以下は静的ブロックの初期化をトリガーします:

  • クラスのインスタンス化
  • クラスの静的メソッドの呼び出し
  • 静的フィールドへの値の割り当て
  • 非定数静的フィールドの使用
  • 実行中一方、最上位クラスのassert ステートメント

インスタンス初期化子

インスタンス初期化子ブロックは、クラスのコンストラクターの直前に実行されます。 。実行順序は、クラス定義内のこれらのブロックの出現によって決まります。

次のコード スニペットを考えてみましょう:

class Parent {
    // Static initializer
    static {
        System.out.println("static - parent");
    }

    // Instance initializer
    {
        System.out.println("instance - parent");
    }

    // Constructor
    public Parent() {
        System.out.println("constructor - parent");
    }
}

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

    // Instance initializer
    {
        System.out.println("instance - child");
    }

    // Constructor
    public Child() {
        System.out.println("constructor - child");
    }
}

Child クラスがインスタンス化されると、次の出力が生成されます:

static - parent
static - child
instance - parent
constructor - parent
instance - child
constructor - child

これは、次のことを示しています。親クラス (この場合は Parent) の静的初期化子は、子クラス (Child) の静的初期化子よりも前に実行されます。各クラス内では、インスタンス初期化ブロックがコンストラクターの前に実行されます。

未使用クラスの例外

Java では、使用されないクラスはロードまたは初期化されません。これは、静的初期化ブロックとインスタンス初期化ブロックの両方に適用されます。提供されているコード例では、参照されることのない新しいクラス (IAmAClassThatIsNeverused) を追加しても、他のクラスの初期化順序には影響しません。

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

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