我可以定义多个静态块吗?
如果可能,我为什么要定义多个静态块?
答案 0 :(得分:24)
这允许您将代码与初始化的东西放在一起。
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
}
答案 1 :(得分:7)
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
静态块按声明顺序连续执行,前两个静态块分配的值由final(第三个静态块)替换。
还需要注意的另一件事是静态初始化块只运行一次,即JVM加载类时,与创建的对象数量无关。
答案 2 :(得分:4)
您可以定义多个静态块。但我认为这不是必要的。但是如果你要定义,那么它们将按顺序执行。我的意思是首先定义的静态块将首先执行,下一个块将执行下一个。
答案 3 :(得分:4)
是。可以在java类中定义多个静态块。它有助于初始化代码的模块化,这反过来有助于更好地理解和读取代码的性质(正如彼得提到的那样)。