java 中对象创建时静态代码块只执行一次。它在类被加载到 jvm 时运行,且仅针对该类执行一次,与后续创建多少个该类的实例无关。

静态代码块在类加载时的具体行为
当 Java 虚拟机首次加载一个类时,会执行其静态代码块。这是类初始化的关键步骤,确保类在使用前完成必要的静态资源准备。

public class StaticBlockDemo {
static {
System.out.println("Static block executed");
}
public static void main(String[] args) {
new StaticBlockDemo();
new StaticBlockDemo();
new StaticBlockDemo();
}
}
// Output:
// Static block executed
静态代码块与非静态代码块的执行顺序对比
非静态代码块在每次创建对象时都会执行,而静态代码块仅在类加载时执行一次。这种差异使得静态代码块适合用于初始化静态变量或加载一次性资源。

public class BlockOrderDemo {
static {
System.out.println("Static block");
}
{
System.out.println("Instance block");
}
public BlockOrderDemo() {
System.out.println("Constructor");
}
public static void main(String[] args) {
new BlockOrderDemo();
new BlockOrderDemo();
}
}
// Output:
// Static block
// Instance block
// Constructor
// Instance block
// Constructor
基于类加载机制的静态代码块执行条件
静态代码块的执行依赖于类的加载过程。只有当类被主动使用时,才会触发加载并执行静态代码块。被动使用如通过子类引用父类静态字段,不会导致父类加载。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











