java静态代码块

在Java中,静态代码块是一个在类被加载时执行的代码块。它位于类体中,使用关键字 static 进行标识。静态代码块在类加载时执行,只执行一次,用于初始化类的静态成员变量或执行一些静态的初始化操作。

静态代码块的语法如下:

java
public class MyClass { // 静态变量 static int myStaticVariable; // 静态代码块 static { // 在类加载时执行的代码 myStaticVariable = 10; System.out.println("静态代码块执行"); } // 其他成员和方法... }

在上面的例子中,myStaticVariable 是一个静态变量,而 static 代码块用于初始化这个静态变量,并在类加载时执行。当类被加载时,静态代码块中的代码会被执行一次。

注意事项:

静态代码块不能引用非静态的成员变量或方法,因为它们在静态代码块执行之前就被加载了。静态代码块按照它们在类中的出现顺序依次执行。静态代码块不能被直接调用,它在类加载时自动执行。

当一个类被加载时,按照

加载: 类加载器负责加载类的字节码文件到内存中。

链接: 链接分为三个阶段:

验证: 确保被加载的类的正确性,检查是否符合Java虚拟机规范。准备: 为类的静态变量分配内存,并将其初始化为默认值。解析: 将类、方法、字段等符号引用解析为直接引用。

初始化: 执行类的初始化代码,包括执行静态变量的赋值和执行静态代码块。这是静态代码块被执行的阶段。

java
public 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方法中访问静态变量时,已经完成了初始化过程。

静态代码块提供了在类加载时执行一次性初始化操作的机会,这些操作通常涉及静态变量的初始化或其他与类相关的静态内容。