Java におけるフィールドとコンストラクター コードの初期化順序
Java プログラムでは、フィールドの初期化とコンストラクター コードの実行の順序を変更できます。特に 2 つの間の優先順位に関しては、混乱を招く可能性があります。ただし、Java 仮想マシンの仕様では、適切な順序を決定するイベントの明確なシーケンスの概要が説明されています。
-
静的変数とブロック: まず、静的変数と静的初期化ブロックは、次のように初期化されます。クラスが以前に初期化されていない限り、テキストの順序。
-
スーパー コンストラクター呼び出し: 次に、コンストラクター内で super() 呼び出しが明示的または暗黙的に実行されます。この呼び出しは、親クラスのコンストラクターを呼び出します。
-
フィールドの初期化とブロック: super() 呼び出しに続いて、インスタンス変数は、関連するインスタンス初期化ブロックとともにテキストの順序で初期化されます。
-
コンストラクター本体: 最後に、コンストラクターの残りの本体が後で実行されます。 super() 呼び出しが完了しました。
提供されたコード スニペットでは、指定された初期化順序により、出力 "YZXZ" が生成されます。段階的に見てみましょう。
- 静的初期化子と静的変数はコード内に存在しません。
- コンストラクター呼び出し Z() が実行され、Z のスーパークラス コンストラクター X(
- スーパークラス コンストラクター X() が実行され、"X" がコンストラクターに出力されます。 console.
- Z クラスのインスタンス変数 y が初期化され、コンソールに "Y" が出力されます。
- X クラスのインスタンス変数 b が初期化され、コンソールに "Z" が出力されます。コンソール (Z が現在のサブクラスであるため)。
したがって、出力「YZXZ」は、Java によって定義された初期化と実行の順序を正しく反映しています。仮想マシンの仕様
以上がJava におけるフィールドとコンストラクターの正確な初期化順序は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。