Java プログラムでは、常にさまざまなコード ブロックの特定の実行順序に従います。この記事からは、次の例を使用して、Java のさまざまなコンポーネント (静的ブロック、インスタンス初期化ブロック、コンストラクター、メソッドなど) がどのように実行されるかを調べていきます。
読み続ける前に、次の Java コードの出力を自分で判断し、先に進む前に以下にコメントしてください。
public class Execute { public Execute() { System.out.println("Hello from constructor"); } public void method() { System.out.println("Hello from method"); } static { System.out.println("Hello from static block"); } { System.out.println("Hello from instance initializer block"); } public static void main(String[] args) { System.out.println("Hello from main"); Execute obj = new Execute(); obj.method(); } }
あなたは少なくとも一度は出力順序を決定しようとしたと思います。
上記の Java コードの出力は次のようになります:
Hello from static block Hello from main Hello from instance initializer block Hello from constructor Hello from method
正しく判断できましたか?
次に、Java が上記のような出力を与える理由を確認してみましょう。
上記の Java コードを実行すると、実行順序は次のようになります
では、これらの手順を 1 つずつ見てみましょう
static { System.out.println("Hello from static block"); }
Java の静的ブロックは、クラスが JVM (Java 仮想マシン) によってメモリにロードされるときに 1 回実行されるコードのブロックです。これは、メイン メソッドまたはその他のインスタンス関連のコードが実行される前に発生します。
これは主に、静的変数の設定やクラスの最初の使用時に必要なセットアップの実行など、静的な初期化に使用されます。
このコードでは、出力の最初の行は静的ブロックによるものです:
Hello from static block
public static void main(String[] args) { System.out.println("Hello from main"); Execute obj = new Execute(); obj.method(); }
main メソッドは、Java アプリケーションのエントリ ポイントです。 プログラムの実行時に、ここから実行が開始されます。
静的ブロックが実行された後、JVM は main メソッド内のコードの実行を開始します。
このコードでは、出力の 2 行目は main メソッドによるものです:
Hello from main
{ System.out.println("Hello from instance initializer block"); }
Java の Instance Initializer ブロックは、クラス内でメソッド、コンストラクター、または静的ブロックの外側で定義されるコード ブロックです。これは、クラスのインスタンスが作成されるたびに、クラスのコンストラクターが実行される直前に実行されます
Execute obj = new Execute(); でオブジェクトを作成すると、コンストラクターの前にインスタンス ブロックが実行されます。このブロックは、オブジェクトの共通プロパティを初期化するのに役立ちます。
このコードでは、出力の 3 行目は Instance Initializer ブロックによるものです。
public class Execute { public Execute() { System.out.println("Hello from constructor"); } public void method() { System.out.println("Hello from method"); } static { System.out.println("Hello from static block"); } { System.out.println("Hello from instance initializer block"); } public static void main(String[] args) { System.out.println("Hello from main"); Execute obj = new Execute(); obj.method(); } }
Hello from static block Hello from main Hello from instance initializer block Hello from constructor Hello from method
コンストラクターはオブジェクトの初期化に使用される特別なメソッドであり、新しいオブジェクトが作成されるときに自動的に呼び出されます。クラスと同じ名前を持つ必要があり、戻り値の型はなく、void さえありません。
オブジェクト作成時にインスタンス初期化ブロックの直後に実行されます。これは通常、インスタンス変数を初期化するか、そのオブジェクトに固有の起動ロジックを実行するために使用されます。
このコードでは、出力の 4 行目はコンストラクターによるものです。
static { System.out.println("Hello from static block"); }
Hello from static block
Java では、メソッドの実行とは、特定のタスクを実行するためにメソッドを呼び出す、または呼び出すプロセスを指します。メソッドは操作を実行するコードのブロックであり、その実行はプログラム内からメソッドを呼び出すことによって開始されます。
オブジェクトが作成され初期化された後、method() 関数を明示的に呼び出します。これにより、メソッド本体内のコードが実行されます。
このコードでは、出力の最後の行はメソッドの実行によるものです:
public static void main(String[] args) { System.out.println("Hello from main"); Execute obj = new Execute(); obj.method(); }
さまざまなブロックが実行される実行順序を理解することは、効率的な Java プログラムをデバッグおよび作成するために重要です。例:
静的ブロックは、クラスレベルのプロパティを初期化するのに最適です。
インスタンス ブロックは、共通のオブジェクト初期化ロジックに最適です。
コンストラクターは、オブジェクト固有のセットアップを処理するのに最適です。
この順序を理解することで、よりクリーンで効率的で保守しやすい Java コードを作成できます。
以上がこの Java コードの出力は見つかりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。