java静态代码块
在Java中,静态代码块是一个在类被加载时执行的代码块。它位于类体中,使用关键字 static 进行标识。静态代码块在类加载时执行,只执行一次,用于初始化类的静态成员变量或执行一些静态的初始化操作。
静态代码块的语法如下:
javapublic class MyClass {
// 静态变量
static int myStaticVariable;
// 静态代码块
static {
// 在类加载时执行的代码
myStaticVariable = 10;
System.out.println("静态代码块执行");
}
// 其他成员和方法...
}
在上面的例子中,myStaticVariable 是一个静态变量,而 static 代码块用于初始化这个静态变量,并在类加载时执行。当类被加载时,静态代码块中的代码会被执行一次。
注意事项:
静态代码块不能引用非静态的成员变量或方法,因为它们在静态代码块执行之前就被加载了。静态代码块按照它们在类中的出现顺序依次执行。静态代码块不能被直接调用,它在类加载时自动执行。
当一个类被加载时,按照
加载: 类加载器负责加载类的字节码文件到内存中。
链接: 链接分为三个阶段:
验证: 确保被加载的类的正确性,检查是否符合Java虚拟机规范。准备: 为类的静态变量分配内存,并将其初始化为默认值。解析: 将类、方法、字段等符号引用解析为直接引用。
初始化: 执行类的初始化代码,包括执行静态变量的赋值和执行静态代码块。这是静态代码块被执行的阶段。
javapublic class MyClass {
// 静态变量
static int myStaticVariable = initializeVariable();
// 静态代码块
static {
System.out.println("静态代码块执行");
}
// 初始化静态变量的方法
static int initializeVariable() {
System.out.println("初始化静态变量");
return 10;
}
public static void main(String[] args) {
System.out.println("在main方法中访问静态变量: " + myStaticVariable);
}
}
在这个例子中,当MyClass类被加载时,首先执行静态变量的初始化,然后执行静态代码块。最后,在main方法中访问静态变量时,已经完成了初始化过程。
静态代码块提供了在类加载时执行一次性初始化操作的机会,这些操作通常涉及静态变量的初始化或其他与类相关的静态内容。