请问关于 Java static 变量的问题?
ringa_lee
ringa_lee 2017-04-18 10:56:42
0
2
454
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_lee
ringa_lee

ringa_lee

全員に返信(2)
巴扎黑

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

いいねを押す +0
黄舟

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!