java - 什么时候执行一个类的静态 block ?

标签 java jvm initialization classloader static-block

我有 2 个 jar ,我们称它们为 a.jar 和 b.jar。

b.jar 依赖于 a.jar。

在一个.jar 中,我定义了一个类,我们称之为StaticClass。在 StaticClass 中,我定义了一个静态 block ,调用了一个名为“init”的方法:

public class StaticClass {
  static {
    init();
  } 

  public void static init () {
    // do some initialization here
  }
}

在 b.jar 中,我有一个 main,所以在 main 中,我希望 init() 方法已被调用,但实际上没有。我怀疑这是因为 jvm 没有加载 StaticClass,谁能告诉我

  1. 我的结论正确吗?
  2. 什么触发 jvm 加载类?
  3. 如何让静态 block 自动执行?

谢谢

最佳答案

是的,你是对的。静态初始化 block 在 JVM(具体来说是类加载器)加载 StaticClass(在代码中第一次引用它时发生)时运行。

您可以通过显式调用 StaticClass.init() 来强制调用此方法,这比依赖 JVM 更可取。

您也可以尝试使用 Class.forName(String) 来强制 JVM 加载该类并调用其静态 block 。

关于java - 什么时候执行一个类的静态 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130461/

相关文章:

java - Grails - 为什么需要 withTransaction?

Java-Swing 序列化背后的思想

适用于 Windows 10 的 Java "os.name"?

java - 为什么 Array<String> 是 kotlin 中 main 函数选择的参数类型?

java - 在 Docker 容器中运行时,JVM 无法映射保留的内存

swift - 为什么我们不能在 swift 的扩展中添加指定的初始化程序?

java - 继承类和父类(super class)的初始化顺序

java - 使用 Ribbon 负载均衡器获取所有可访问服务器的列表,无论区域如何

java - 仅将文件中的特定文本添加到数组列表

c++ - 非静态常量数据成员