给人的印象是,加载类时会调用类的静态初始化块。
(例如,参见以下答案: https://stackoverflow.com/a/9130560/889742 )
但是此测试表明,静态块不是在类加载时调用的,而是在首次使用时调用的。
为什么?
class Test
{
static
{
System.out.println("In test static block");
}
static int x;
}
public class xxxx {
public static void main(String[] args) throws Exception {
Class<?> clasz = ClassLoader.getSystemClassLoader().loadClass("Test");
//at least one of these lines is required for static block to be called
//Test.x = 1;
//clasz.newInstance();
}
}
答案 0 :(得分:0)
静态块仅执行一次:第一次创建该类的对象或第一次访问该类的静态成员(即使您从未创建该类的对象)。
参考:https://www.geeksforgeeks.org/g-fact-79/
在您的情况下,您只是在加载类而不是初始化类的对象。