ホームページ  >  に質問  >  本文

请问关于 Java static 变量的问题?

public class StaticTest {

    private static String a;
    private static String b = "this is " + a;

    public static void main(String[] args) {
        a = "test";
        // I think the result is this is test
        // but the result is this is null, why?

        System.out.println(b);
    }


    //
    //  我本以为输出结果是 this is test
    // 没想到输出结果为 this is null, 这是什么原因

}
ringa_leeringa_lee2742日前459

全員に返信(2)返信します

  • 巴扎黑

    巴扎黑2017-04-18 10:58:42

    まず第一に: A 変数を定義するときは、初期値を割り当てないため、A は NULL になり、次に B が得られます。当然これは null です
    次に 2 つ目: public static void main、コンパイラこのコードをコンパイルしています a と b が main 関数によって最初に参照され、a を変更すると、a は変更されますが、b は同じ b のままであり、これは永久に null になります。静的関数を実行するプロセスの意味を理解する必要があります。 B は動的に設定されないため、当然のことながら、取得されるのは静的な b であり、動的にコンパイルされません。

    返事
    0
  • 黄舟

    黄舟2017-04-18 10:58:42

    これは、JVM のクラス初期化メカニズムについてです。バイトコードを実行オブジェクトに変換する 3 つのプロセスは、ロード、接続、初期化です。 。 。 StaticTest には、JVM の起動時にスタートアップ クラスに設定される main メソッドがあり、アクティブな呼び出しを実行してクラスを初期化し、これらの 2 行のコード private static String を実行するため、接続準備プロセスではデフォルト値 null が与えられます。 a; private static String b = "これは " + a;so b=これは null です

    返事
    0
  • キャンセル返事