【问题标题】:Will a class be loaded completely on static member dependency? [duplicate]类会完全加载到静态成员依赖项上吗? [复制]
【发布时间】:2026-02-20 14:20:03
【问题描述】:
public class A extends B {
    public static final int CONST = 6;

... some logic ...
}

public class C {
    private int addNumber(int x) {
        return x + A.CONST;
    }
}

我想知道 C 类的 jUnit 测试是否只会从 A 类加载字段,这取决于或是否将完全加载来自 A 类及其扩展(B 类)的所有逻辑。

在这种情况下 JVM 是如何工作的?

谢谢!

【问题讨论】:

  • 在示例代码中,可能没有加载类 A。如果编译器决定将 A.CONST 值内联到类 C 中(由于 public static final 修饰符,他可以这样做),在运行时 C 类没有对 A 类的引用,因此 JVM 没有理由加载类A.

标签: java junit jvm


【解决方案1】:

在第一次引用类 A 时,该类将被完全加载。鉴于 A 扩展了 B,类 B 也将被完全加载。 然后 B 中的所有静态初始化程序和静态字段将按照 B 中指定的顺序执行/初始化,然后在 A 中,您将返回到提取 CONST 字段的代码。

【讨论】: