来自 Class.forName(String className) API:调用此方法等效于: Class.forName(className, true, currentLoader)。
第二个参数 = true 表示初始化类,初始化类表示运行静态初始化器
这是一个要检查的测试
package test;
class Test2 {
static {
System.out.println("static init");
}
}
public class Test1 {
public static void main(String[] args) throws Exception {
Class.forName("test.Test2");
}
}
输出
static init
但是如果你加载 Test2
Class.forName("test.Test2", false, ClassLoader.getSystemClassLoader());
不会有输出。您也可以使用此测试来查看Test.class.getName()
也没有加载该类。
让它加载的最简单方法是添加一个空的静态方法并调用它:
class Test2 {
public static void load() {
}
...
Test2.load();