Java Class.forName()vs Thread.currentThread()。getContextClassLoader()。loadClass()

时间:2011-11-12 17:04:52

标签: java class static

有人可以解释一下Class.forName()和Thread.currentThread()。getContextClassLoader()。loadClass()之间的区别。 我有下一个代码

<code>
public class Test {
    static {
        System.out.println("Hello from static block");
         }
}

public class Application {
    public static void main(String[] args) throws ClassNotFoundException {
//Class test = Class.forName("com.home.Test"); //Outputs "Hello from static block"
  Thread.currentThread().getContextClassLoader().loadClass("com.home.Test");
}
}
</code>

当我执行Class.forName(“com.home.Test”)时,它输出“Hello from static block”。但是当我执行Thread.currentThread()。getContextClassLoader()。loadClass(“com.home.Test”);它没有输出任何东西。

1 个答案:

答案 0 :(得分:2)

ClassLoader.loadClass(String)无法解析类(因此也不会对其进行初始化)。

另一方面

Class.forName(String) 初始化类。这就是为什么你看到在这种情况下运行的初始值设定项,而不是在使用loadClass

如果您需要详细信息(这是一个有趣的读物),则在Excecution部分的JSL中描述了加载/链接/初始化步骤。