Java static 代码块的执行顺序
引言
在Java中,static代码块是用来初始化静态成员变量的一种特殊的代码块。它在类加载时执行,并且只执行一次。但是,当存在多个静态代码块时,程序员可能会对它们的执行顺序产生疑问。本文将详细介绍Java static代码块的执行顺序,并且通过代码示例来说明。
执行顺序
在了解Java static代码块的执行顺序之前,我们先来了解一下静态成员变量的初始化。
静态成员变量可以在声明时直接赋值,也可以在static代码块中进行初始化。当一个类被加载时,会按照以下顺序进行静态成员变量的初始化:
- 静态成员变量按照声明的顺序依次进行初始化;
- 如果存在静态代码块,那么静态代码块会在静态成员变量初始化之后执行;
通过以下代码示例来说明:
public class StaticDemo {
public static int num1 = 10;
public static int num2;
static {
num2 = 20;
}
public static void main(String[] args) {
System.out.println("num1: " + num1);
System.out.println("num2: " + num2);
}
}
上述代码中,静态成员变量num1
在声明时直接赋值为10,而num2
在static代码块中进行初始化为20。在main
方法中,我们打印了这两个变量的值。运行结果为:
num1: 10
num2: 20
从结果可以看出,静态成员变量的初始化顺序与声明的顺序一致,而static代码块在静态成员变量初始化之后执行。
接下来,我们将讨论多个静态代码块的执行顺序。
如果一个类中存在多个静态代码块,那么它们的执行顺序与它们在代码中的出现顺序一致。也就是说,先出现的静态代码块先执行,后出现的静态代码块后执行。
通过以下代码示例来说明:
public class StaticDemo {
public static int num1 = 10;
public static int num2;
static {
num2 = 20;
System.out.println("First static block");
}
static {
System.out.println("Second static block");
}
public static void main(String[] args) {
System.out.println("num1: " + num1);
System.out.println("num2: " + num2);
}
}
上述代码中,我们在静态代码块中分别输出了"First static block"和"Second static block"。在main
方法中,我们打印了静态成员变量的值。运行结果为:
First static block
Second static block
num1: 10
num2: 20
从结果可以看出,先出现的静态代码块先执行,后出现的静态代码块后执行。
总结
在Java中,static代码块是用来初始化静态成员变量的一种特殊的代码块。它在类加载时执行,并且只执行一次。当存在多个静态代码块时,它们的执行顺序与它们在代码中的出现顺序一致。静态成员变量的初始化顺序与声明的顺序一致。
希望通过本文的介绍,读者对Java static代码块的执行顺序有了更深入的理解。
参考资料
- [Java static block](
- [Java static block execution](