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

静态块按照它们声明的顺序依次执行,前两个静态块分配的值被最后一个(第三个静态块)替换。

还要观察的另一件事是静态初始化块只运行一次,即当类由 JVM 加载时,与创建的对象数量无关。

于 2014-06-18T08:29:35.557 回答
6

您可以定义多个静态块。但我认为这不是真的必要。但是,如果您要定义,那么它们将按顺序执行。我的意思是首先定义的静态块将首先执行,下一个块将接下来执行。

于 2012-04-04T12:45:53.643 回答
5

是的。可以在 java 类中定义多个静态块。它有助于初始化代码的模块化,进而有助于更好地理解代码的可读性和可读性(正如彼得提到的)。

于 2012-04-04T12:57:42.897 回答