1.首先我们定义一个基类Base
public class Base {
static int num = 1;
static {
System.out.println("Base " + num);
}
}
2.然后我们写一个测试类
public class Main {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
// 不会初始化静态块
Class clazz1 = Base.class;
// clazz1.newInstance();
System.out.println("------");
// 会初始化静态块
Class clazz2 = Class.forName("com.kim.test.java.Base");
}
}
运行结果为:
------
Base 1
由结果可知,Class.forName显示加载类时候会调用代码中静态块。而直接用类.class则不加载静态代码块,只要在
clazz1.newInstance()时候才会初始化这些静态块