Java中代码块分三类:普通块在方法内执行,每次调用方法时运行;构造块在每次new对象时、构造器代码前执行;静态块在类加载时仅执行一次,优先级最高。

Java里的代码块看着都是大括号{},但位置和关键字一变,作用、时机、范围就完全不同。搞清这三类——普通块、构造块、静态块——是理解对象创建和类加载流程的关键。
普通代码块:方法内的“临时小隔间”
写在方法内部、用{}包起来的代码段,就是普通代码块。它不参与类或对象的生命周期管理,纯粹为局部逻辑服务。
- 变量只在块内有效,出了大括号就不可访问,能避免命名冲突
- 每次调用该方法,块里的代码就执行一次
- 多个普通块按书写顺序依次执行,和周围语句一样“先写先跑”
- 不能定义在类的最外层(即不能脱离方法或构造器)
构造代码块:对象诞生时的“统一初始化环节”
写在类里、方法外,没有static修饰、也没有名字和参数的大括号{},就是构造代码块。它属于实例级别,每次new一个对象都会触发。
- 执行时机严格固定:在构造器第一行(
super()或this())之后、其余构造器代码之前 - 多个构造块按从上到下的顺序执行,适合提取多个构造器共用的初始化逻辑
- 可以访问实例变量和方法(此时对象内存已分配,但尚未完全初始化)
- 不依赖构造器是否存在——哪怕你没写任何构造器,它也会在默认构造器中被调用
静态代码块:类加载时的“一次性启动配置”
用static{}定义,也位于类中、方法外。它不属于任何对象,而是绑定在类本身,只在类首次被JVM加载时执行一次。
立即学习“Java免费学习笔记(深入)”;
- 优先级最高:早于
main方法、早于任何对象创建,是整个类生命周期的起点 - 适合做类级资源初始化,比如读取配置、建立数据库连接池、给
static字段赋值 - 多个静态块按定义顺序执行;后续再
new多少对象,它都不会重复运行 - 不能直接访问实例成员(因为此时还没有对象),只能操作
static变量或调用static方法
执行顺序一句话记牢
当运行含new MyClass()的程序时,实际发生的顺序是:静态代码块 → main方法 → 构造代码块 → 构造方法。其中静态块仅一次,后三者每new一次就走一遍。


















