在Java中,`static{}`块会执行几次?它又是在什么时候执行的呢?这是许多开发者初学静态代码块时常见的疑问。实际上,`static{}`块在整个程序运行期间只会执行一次。它的执行时机是在类被加载到内存时,且在任何静态变量初始化之前。
具体来说,当JVM首次使用某个类时(例如创建该类的第一个对象、访问该类的静态成员或方法等),会触发类的加载过程,在这个过程中,`static{}`块会被执行。如果一个类被加载多次(比如通过不同的类加载器),那么每次加载都会重新执行`static{}`块。但对同一个类加载器而言,无论创建多少个该类的对象,`static{}`块都只会在类加载时执行一次。这种特性常用于初始化静态资源或完成一些只需要执行一次的操作。
1条回答 默认 最新
桃子胖 2025-06-13 07:05关注1. 初识静态代码块
在Java中,
static{}块是一种特殊的代码块,用于初始化类的静态资源。它在整个程序运行期间只会执行一次,通常在类加载到内存时触发。这种特性使得它非常适合用来完成只需要执行一次的操作。- 静态代码块会在类加载时执行。
- 无论创建多少个该类的对象,静态代码块都只会在类加载时执行一次。
2. 静态代码块的执行时机
静态代码块的执行时机是在类被加载到内存时,且在任何静态变量初始化之前。以下是触发类加载的常见场景:
- 创建该类的第一个对象。
- 访问该类的静态成员或方法。
- 使用反射机制加载类。
- 初始化子类(会先加载父类)。
下面通过一个简单的例子来说明:
class Example { static { System.out.println("Static block executed"); } } public class Main { public static void main(String[] args) { new Example(); // 触发静态代码块执行 } }3. 静态代码块的执行次数分析
对于同一个类加载器而言,静态代码块在整个程序运行期间只会执行一次。但如果类被不同的类加载器加载,则每次加载都会重新执行静态代码块。
场景 静态代码块执行次数 同一类加载器加载类 仅执行一次 不同类加载器加载类 每次加载都会执行 4. 静态代码块的实际应用
静态代码块常用于以下场景:
- 初始化静态变量。
- 加载外部资源(如配置文件、数据库连接等)。
- 完成一些只需要执行一次的逻辑操作。
例如,使用静态代码块加载配置文件:
class ConfigLoader { static { loadConfig(); } private static void loadConfig() { System.out.println("Configuration loaded"); } }5. 静态代码块与类加载的关系图解
以下是类加载过程中静态代码块执行的流程图:
sequenceDiagram participant JVM as Java Virtual Machine participant ClassLoader as 类加载器 participant StaticBlock as 静态代码块 Note over JVM,ClassLoader: 触发类加载 JVM->>ClassLoader: 加载目标类 ClassLoader->>StaticBlock: 执行静态代码块 StaticBlock-->>ClassLoader: 完成静态初始化 ClassLoader-->>JVM: 返回加载完成状态本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报