在Java中,静态代码块(Static Block)是类加载时自动执行的代码块。它属于类,而不是类的任何实例。静态代码块在类被JVM加载到内存时执行,并且只执行一次。无论创建多少个类的实例,静态代码块只会被执行一次。
静态代码块主要用于初始化类的静态变量,或者在类加载时执行一些只需执行一次的操作。
静态代码块的语法如下:
public class MyClass {
// 静态变量
public static int myStaticVar;
// 静态代码块
static {
// 初始化静态变量或执行其他操作
myStaticVar = 42;
System.out.println("静态代码块被执行");
}
// 其他成员变量和方法...
}
静态代码块的特点:
- 只执行一次:静态代码块在类加载时执行,并且只执行一次。无论创建多少个类的实例,静态代码块都不会再次执行。
- 先于构造器执行:静态代码块在类的构造器(包括实例构造器和静态构造器)之前执行。
- 不能访问非静态成员:由于静态代码块属于类,而不是类的实例,因此它不能直接访问类的非静态成员(非静态变量和非静态方法)。
静态代码块与构造器的区别:
- 静态代码块属于类,构造器属于类的实例。
- 静态代码块在类加载时执行,构造器在创建类的实例时执行。
- 静态代码块只执行一次,而构造器每次创建类的实例时都会执行。
静态代码块的使用场景:
- 初始化静态变量:可以在静态代码块中初始化类的静态变量,确保在类的其他部分使用这些变量时它们已经被正确初始化。
- 执行只需执行一次的操作:如果有些操作只需要在类加载时执行一次,比如加载配置文件、初始化数据库连接池等,可以将这些操作放在静态代码块中。
- 多个代码块中有相同的语句时,代码看起来比较冗余,这时我们可以把相同的语句放入到一个代码块中
注意:
需要注意的是,虽然静态代码块在类加载时执行,但并不意味着它在程序启动时立即执行。类加载的时机取决于JVM和类的使用方式。例如,如果一个类从未被使用,那么它的静态代码块可能永远不会被执行。