静态代码块在类加载时执行且仅一次,用于静态变量初始化;构造代码块在每次创建对象时执行,用于实例变量的统一初始化。

构造代码块和静态代码块在Java中都是用来初始化的,但它们的执行时机、运行次数和使用场景有明显区别。
静态代码块(Static Block)
用 static {} 定义,属于类本身。它在类加载到JVM时执行,且只执行一次。
主要用途:为静态变量初始化,或执行仅需一次的准备工作。
特点:- 随着类的加载而执行,优先于任何实例的创建
- 一个类中可以有多个静态代码块,按书写顺序执行
- 不依赖对象,即使没有创建实例也会执行(只要类被加载)
构造代码块(Instance Initialization Block)
用 {} 定义,属于每个实例。每次创建对象时都会执行,执行时间在调用构造方法之前。
立即学习“Java免费学习笔记(深入)”;
主要用途:为所有构造方法共用的实例变量进行统一初始化。
触网万能商城系统,3年专注打磨一款产品,专为网络服务公司、建站公司、威客、站长、设计师、网络运营及营销人员打造,是一款超级万能建站利器,彻底告别代码编程和找模板,改模板,改代码的低效高成本方式,仅需一个人可服务无数客户,系统集万能官网+万能商城+万能表单+博客+新闻+分销...于一体,通过海量模块拖拽布局、万能组合和超级自定义功能,可以构建各种类型的响应式网站。
- 每次 new 对象时都会执行
- 多个构造方法共享相同的初始化逻辑时很有用
- 执行顺序在静态代码块之后,构造函数之前
执行顺序示例
假设有一个类包含静态代码块、构造代码块和构造函数:
class Example {
static {
System.out.println("静态代码块执行");
}
{
System.out.println("构造代码块执行");
}
public Example() {
System.out.println("构造函数执行");
}
}
调用:
new Example(); new Example();
输出结果为:
静态代码块执行 构造代码块执行 构造函数执行 构造代码块执行 构造函数执行
可见静态代码块只执行一次,构造代码块每次创建对象都执行。
基本上就这些,关键在于理解“类加载”和“对象创建”两个阶段的区别。









