1. ホーム

[解決済み】静的初期化ブロック

2022-04-16 04:54:54

質問

私の理解では、quot;static initialization block"は、1行でできない場合、staticフィールドの値を設定するために使用されます。

しかし、なぜそのために特別なブロックが必要なのか理解できません。例えば、あるフィールドを静的と宣言します(値の割り当てなしで)。そして、その宣言された静的フィールドに値を生成して代入するコードを何行か書きます。

なぜ、このような特別なブロックが必要なのでしょうか。 static {...} ?

解決方法は?

その 非静的ブロックです。

{
    // Do Something...
}

という名前を取得します。 毎回 のインスタンスが作成されます。その 静的ブロック が呼び出されるだけです。 一度だけ その型のオブジェクトをいくつ作っても、そのクラス自体が初期化されるときに、です。

public class Test {

    static{
        System.out.println("Static");
    }

    {
        System.out.println("Non-static block");
    }

    public static void main(String[] args) {
        Test t = new Test();
        Test t2 = new Test();
    }
}

これが印刷されます。

Static
Non-static block
Non-static block