我已经编写了要使用ClassLoader加载的小型Java类。
public class ClassLoadingObj {
public ClassLoadingObj(){
System.out.println("---instantiating ClassLoadingObj ");
}
static{
System.out.println("---Loading ClassLoadingObj");
}
}
但是当我执行以下代码时:
ClassLoader.getSystemClassLoader().loadClass("com.st.classLoader.ClassLoadingObj");
我发现静态块没有被执行。我的问题是,如果使用
loadClass()
方法加载类,那么与实例化始终执行静态块的类相比,为什么不执行静态块。 最佳答案
实际上,静态类在类初始化初始化时执行,并且与加载的有点不同。
在初始化的类之前,是链接的,在此之前是加载的,因此该类有3个(或4个,包括未加载的)状态。
Here很好地描述了它是如何工作的,以及初始化类的要求是什么。
摘录:
关于java - ClassLoader loadClass()的工作是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27902594/