Java コンストラクターの初期化順序を理解する
Java でオブジェクトを構築する場合、初期化の順序を理解することが重要です。 「次のプログラムの出力を明確にできる人はいますか?」
コード:
class X { Y b = new Y(); X() { System.out.print("X"); } } class Y { Y() { System.out.print("Y"); } } public class Z extends X { Y y = new Y(); Z() { System.out.print("Z"); } public static void main(String[] args) { new Z(); } }
コンストラクターがインスタンスの前に初期化されるという仮定の下で、期待される出力は "XZYY" でした。変数。ただし、実際の出力は「YYXZ」です。この逸脱は、実際の初期化順序を理解することの重要性を強調しています。
Java 仮想マシン仕様によれば、初期化順序は次のとおりです:
この場合、静的変数やブロックは関係ありません。 super() 呼び出しはクラス Z のコンストラクター内で暗黙的に発生するため、コードには表示されません。したがって、初期化順序は次のとおりです。
これは出力 "YYXZ" を説明します。
以上がこの Java プログラムが「XZYY」ではなく「YYXZ」を出力するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。