17

複数の静的ブロックを定義できますか?

可能であれば、なぜ複数の静的ブロックを定義する必要があるのですか?

4

4 に答える 4

29

はい、複数の初期化ブロックを作成することもできます。

これにより、初期化されたものでコードを配置できます。

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
}
于 2012-04-04T12:47:07.340 に答える
10
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によってロードされた場合です。

于 2014-06-18T08:29:35.557 に答える
6

複数の静的ブロックを定義できます。しかし、それは本当に必要ではないと思います。ただし、定義する場合は、順番に実行されます。つまり、最初に定義された静的ブロックが最初に実行され、次のブロックが次に実行されます。

于 2012-04-04T12:45:53.643 に答える
5

はい。Javaクラスで複数の静的ブロックを定義することが可能です。これは、初期化コードのモジュール化に役立ち、コードの理解と読みやすさの向上に役立ちます(ピーターが述べたように)。

于 2012-04-04T12:57:42.897 に答える