複数の静的ブロックを定義できますか?
可能であれば、なぜ複数の静的ブロックを定義する必要があるのですか?
はい、複数の初期化ブロックを作成することもできます。
これにより、初期化されたものでコードを配置できます。
private static final Map<String, String> map;
static {
// complex code to initialise map
}
private static final DbConnection conn;
static {
// handle any exceptions and initialise conn
}
public class TryInitialisation {
static int[] values = new int[10];
static{
System.out.println("running initialisation block");
for (int i=0; i< values.length; i++)
values[i] = (int) (100.0 * i);
}
static{
System.out.println("running initialisation block");
for (int i=0; i< values.length; i++)
values[i] = (int) (200.0 * i);
}
static{
System.out.println("running initialisation block");
for (int i=0; i< values.length; i++)
values[i] = (int) (300.0 * i);
}
void listValues(){
for (int i=0; i<values.length; i++)
System.out.println(" " + values[i]);
}
public static void main(String[] args) {
TryInitialisation example = new TryInitialisation();
example.listValues();
example = new TryInitialisation(); // referencing a new object of same type
example.listValues();
}
}
出力は次のとおりです。
running initialisation block
running initialisation block
running initialisation block
0
300
600
900
1200
1500
1800
2100
2400
2700
0
300
600
900
1200
1500
1800
2100
2400
2700
静的ブロックは、宣言された順序で順番に実行され、最初の2つの静的ブロックによって割り当てられた値が最後の(3番目の静的ブロック)に置き換えられます。
また、もう1つ注意すべき点は、静的初期化ブロックが1回だけ実行された場合、つまり、作成されたオブジェクトの数に関係なく、クラスがJVMによってロードされた場合です。
複数の静的ブロックを定義できます。しかし、それは本当に必要ではないと思います。ただし、定義する場合は、順番に実行されます。つまり、最初に定義された静的ブロックが最初に実行され、次のブロックが次に実行されます。
はい。Javaクラスで複数の静的ブロックを定義することが可能です。これは、初期化コードのモジュール化に役立ち、コードの理解と読みやすさの向上に役立ちます(ピーターが述べたように)。