ホームページ  >  記事  >  Java  >  Javaオブジェクトが初期化される順序

Javaオブジェクトが初期化される順序

巴扎黑
巴扎黑オリジナル
2017-07-23 13:46:401626ブラウズ

1. 初期化に関係するいくつかの部分

Java オブジェクトは、初期化中に独自の構築メソッドを呼び出すだけでなく、静的ステートメント ブロック、インスタンス ステートメント ブロック、静的変数の初期化、メンバー変数の初期化などの実行の問題も伴います。 、など。初期化シーケンスは、これら 5 つの部分の実行シーケンスを指します。

2.Demo

package com.javase.classtest;public class InitializationSequence {static {
        System.out.println("静态语句块");
    }static MyInnerClass in = new MyInnerClass("静态变量s");

    MyInnerClass in01 = new MyInnerClass("a");

    {
        System.out.println("实例语句块");
    }

    MyInnerClass in02 = new MyInnerClass("b");public InitializationSequence() {
        System.out.println("构造函数");
    }

    @SuppressWarnings("unused")public static void main(String[] args) {
        InitializationSequence obj01 = new InitializationSequence();
        System.out.println("-----------------------------------");
        InitializationSequence obj02 = new InitializationSequence();
    }

}class MyInnerClass {public MyInnerClass(String description) {
        System.out.println("成员变量初始化::" + description);
    }
}

実行結果:

分析:

  1. クラスがロードされるときに実行されますJVM の使用により、 JVM クラスの前提条件 クラスは JVM 仮想マシンにロードされるため、静的ステートメント ブロックが最初に実行され、クラスは 1 回だけロードされ、静的ステートメント ブロックは 1 回だけ実行されます。

  2. 静的変数の初期化: 静的変数はクラスのすべてのインスタンスによって共有され、特定のオブジェクトに依存しないため、オブジェクトの作成時には初期化されませんが、クラスがロードされるときに初期化シーケンスが行われます。 static ステートメントブロック内 その後は 1 回だけ実行してください。

  3. インスタンス ステートメント ブロック: コンストラクター メソッドの前に実行され、コンストラクター メソッドが呼び出されるたびに 1 回実行されます。実行順序は静的変数の初期化後であり、メンバ変数の初期化を基準とします。実際の順序は定義の順序に依存します。変数が初期化される場合、後でメンバー変数が初期化された後に実行されます。

  4. メンバー変数の初期化: コンストラクターの前に実行され、コンストラクターが呼び出されるたびに 1 回実行されます。実行順序 静的変数の初期化後のインスタンス ステートメント ブロックに対する実行順序は、定義順序に依存します。

  5. 構築方法: 最後に実行されます。

要約すると、Javaオブジェクト初期化の実行順序は、静的ステートメントブロック>静的変数初期化>インスタンスステートメントブロック/メンバー変数初期化>コンストラクターメソッドであり、インスタンスステートメントブロックとメンバー変数初期化の相対関係は、実行順序は定義の順序によって異なります。

以上がJavaオブジェクトが初期化される順序の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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