Java中三类代码块执行顺序为:静态代码块(类加载时执行一次)、构造代码块(每次new对象时执行)、局部代码块(所在方法调用时执行),分别对应类初始化、对象创建、方法调用三个生命周期阶段。

Java中三类代码块的执行优先级,本质是看它们绑定在哪个生命周期阶段:类加载、对象创建,还是方法调用。谁更早被JVM触发,谁就优先级更高。
静态代码块:类一加载就跑,只执行一次
它属于类级别,在JVM首次主动使用该类时触发——比如new对象、调用static方法、访问非final static字段,或通过Class.forName加载。此时JVM执行类的<clinit>方法,按源码顺序依次运行所有static{}块。父类静态块一定先于子类;多个静态块从上到下执行;一旦抛出未捕获异常,整个类初始化失败,后续再用直接报ExceptionInInitializerError。
- 不能访问实例变量或方法
- 适合做全局初始化:注册驱动、加载配置、初始化静态缓存
- 哪怕没创建任何对象,只要类被引用,它就执行
构造代码块:每次new对象都执行,总在构造方法前
写在类里、没加static的大括号{},属于实例级别。编译器会把它“复制”到每个构造方法开头(super()调用之后、构造体之前)。所以不管有几个构造器,只要被调用,这块就执行一次。父类构造块先于子类构造块,且都在各自构造方法体之前。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用于对象通用初始化,比如统一设置默认状态
- 不能直接调用,必须通过
new触发 - 比构造方法先执行,但晚于静态代码块
局部代码块:只随方法调用而执行
写在方法内部的{},也叫普通代码块。它不属于类或对象,只属于某次方法调用。执行时机完全取决于方法何时被调用,和类加载、对象创建无关。多个局部块按它们在方法中出现的顺序依次执行。
立即学习“Java免费学习笔记(深入)”;
- 作用域仅限于当前大括号内,变量出了块就不可见
- 常用于缩小变量作用域、临时分组逻辑、配合try-catch隔离资源
- 不会影响类或对象的初始化流程

















