世界再美我始终如一 2025-06-13 07:05 采纳率: 98.6%
浏览 24
已采纳

Java中static{}块会执行几次?什么时候执行?

在Java中,`static{}`块会执行几次?它又是在什么时候执行的呢?这是许多开发者初学静态代码块时常见的疑问。实际上,`static{}`块在整个程序运行期间只会执行一次。它的执行时机是在类被加载到内存时,且在任何静态变量初始化之前。 具体来说,当JVM首次使用某个类时(例如创建该类的第一个对象、访问该类的静态成员或方法等),会触发类的加载过程,在这个过程中,`static{}`块会被执行。如果一个类被加载多次(比如通过不同的类加载器),那么每次加载都会重新执行`static{}`块。但对同一个类加载器而言,无论创建多少个该类的对象,`static{}`块都只会在类加载时执行一次。这种特性常用于初始化静态资源或完成一些只需要执行一次的操作。
  • 写回答

1条回答 默认 最新

  • 桃子胖 2025-06-13 07:05
    关注

    1. 初识静态代码块

    在Java中,static{}块是一种特殊的代码块,用于初始化类的静态资源。它在整个程序运行期间只会执行一次,通常在类加载到内存时触发。这种特性使得它非常适合用来完成只需要执行一次的操作。

    • 静态代码块会在类加载时执行。
    • 无论创建多少个该类的对象,静态代码块都只会在类加载时执行一次。

    2. 静态代码块的执行时机

    静态代码块的执行时机是在类被加载到内存时,且在任何静态变量初始化之前。以下是触发类加载的常见场景:

    1. 创建该类的第一个对象。
    2. 访问该类的静态成员或方法。
    3. 使用反射机制加载类。
    4. 初始化子类(会先加载父类)。

    下面通过一个简单的例子来说明:

    
    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: 返回加载完成状态
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 6月13日