我有 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,谁能告诉我
- 我的结论正确吗?
- 什么触发 jvm 加载类?
- 如何让静态 block 自动执行?
谢谢
最佳答案
是的,你是对的。静态初始化 block 在 JVM(具体来说是类加载器)加载 StaticClass
(在代码中第一次引用它时发生)时运行。
您可以通过显式调用 StaticClass.init()
来强制调用此方法,这比依赖 JVM 更可取。
您也可以尝试使用 Class.forName(String)
来强制 JVM 加载该类并调用其静态 block 。
关于java - 什么时候执行一个类的静态 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130461/