4

前の質問Java クラスと静的ブロックに関連して、コードを静的ブロックと変数から通常のインスタンス初期化ブロックとインスタンス変数に変更したらどうなるでしょうか。コードはどのように実行されるのでしょうか。

class extra3 {
    public static void main(String string[]) {
        Hello123 h = new Hello123();
        System.out.println(h.a);
    }
}
class Hello123 {
    {
        a=20;
    }
    int a=158;
}

ここでは、158 として出力されます。ここで理由を理解できません。他のコードは次のとおりです。

class extra3 {
    public static void main(String string[]) {
        Hello123 h = new Hello123();
        System.out.println(h.a);
    }
}
class Hello123 {
    int a=158;
    {
        a=20;
    }
}

ここでの出力は 20 です。これは、オブジェクトが作成されたときにインスタンス ブロックが最初に実行されるためです。しかし、最初のコードの出力が 158 になるのはなぜですか?

4

3 に答える 3

1

順序が重要です。

初期化ブロックと静的ブロックは、ソース コードに配置された順序に基づいて実行されます。それが理由です。

于 2014-07-23T08:45:46.137 に答える