为什么.class不调用类中的静态块?
这是我的代码:
public class StupidClass {
static {
System.out.println("Stupid class loaded!");
}
}
还有我拥有的测试,我单独运行。
import org.junit.Test;
public class StupidTest {
@Test
public void foo() throws ClassNotFoundException {
final Class<?> stupidClass = Class.forName("StupidClass");
System.out.println(stupidClass.getSimpleName());
}
@Test
public void bar() throws ClassNotFoundException {
final Class<StupidClass> stupidClassClass = StupidClass.class;
System.out.println(stupidClassClass.getSimpleName());
}
}
当我运行测试foo时,我会看到:
Stupid class loaded!
StupidClass
但是当我运行测试栏时,我看到的只是:
StupidClass
引用此页面..
类对象由 Java 虚拟机在装入类时自动构造,并通过调用类装入器中的 defineClass 方法自动构造。
所以我的理解是,在测试栏中,愚蠢的类被加载,否则我会看到一个空的我猜?因此,创建类对象是因为类本身已加载。
现在引用此页面
静态初始化块在 JVM(类装入器 - 具体而言)加载 StaticClass(首次在代码中引用它时发生)时运行。
所以我也期望在测试栏中看到“愚蠢的类加载!”文本,但我不是。
每个类 Candy、Gum 和 Cookie 都有一个静态子句,该子句在首次加载类时执行。
这似乎不是很准确。
我错过了什么?