Java 我可以定义多个静态块吗?

Java 我可以定义多个静态块吗?,java,static,block,Java,Static,Block,我可以定义多个静态块吗 如果可能,为什么要定义多个静态块?您可以定义多个静态块。但我认为这不是真的必要。但是,如果您要定义,那么它们将按顺序执行。我的意思是,首先定义的静态块将首先执行,然后执行下一个块。是的,您也可以创建多个初始化块 这允许您将代码与初始化的东西放在一起 private static final Map<String, String> map; static { // complex code to initialise map } private stat

我可以定义多个静态块吗


如果可能,为什么要定义多个静态块?

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

是的,您也可以创建多个初始化块

这允许您将代码与初始化的东西放在一起

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
}
私有静态最终地图;
静止的{
//初始化映射的复杂代码
}
专用静态最终DBCONN连接;
静止的{
//处理任何异常并初始化conn
}

是。可以在java类中定义多个静态块。它有助于初始化代码的模块化,这反过来又有助于更好地理解代码的可读性(正如peter提到的)

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


还有一点需要注意的是,静态初始化块只运行一次,即JVM加载类时,与创建了多少对象无关。

对于第一个问题,当您尝试时会发生什么?听起来像是一个家庭作业问题……您的工作是在问问题时展示严谨性。
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