Могу ли я определить несколько статических блоков?

Можно ли определить несколько статических блоков?

Если возможно, почему я должен определять многоуровневые статические блоки?

Ответ 1

да, вы также можете сделать несколько блоков инициализации.

Это позволяет вам размещать код с инициализацией вещи.

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
}

Ответ 2

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

Ответ 3

Вы можете определить несколько статических блоков. Но я не думаю, что это действительно необходимо. Но если вы определите, то они будут выполняться последовательно. я означает, что статический блок, определенный первым, будет выполняться первым, а следующий блок будет выполняться следующим образом.

Ответ 4

Да. В java-классе можно определить несколько статических блоков. Это помогает в модулизации вашего кода инициализации, что, в свою очередь, помогает лучше понять и прочитать код кода (как упоминалось выше).