我已经编写了要使用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/

10-10 09:14