【问题标题】:Java Class.forName() vs Thread.currentThread().getContextClassLoader().loadClass()Java Class.forName() 与 Thread.currentThread().getContextClassLoader().loadClass()
【发布时间】:2011-11-12 17:04:52
【问题描述】:

谁能解释一下 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”。但是当我执行 Thread.currentThread().getContextClassLoader().loadClass("com.home.Test");它什么也不输出。

【问题讨论】:

    标签: java class static


    【解决方案1】:

    ClassLoader.loadClass(String) 不解析类(因此也不初始化它)。

    Class.forName(String) 另一方面确实初始化类。这就是为什么在这种情况下您会看到初始化程序正在运行,但在使用 loadClass 时却没有。

    如果您想了解详细信息,请在 JSL 的 Excecution 部分中描述加载/链接/初始化步骤(这是一本有趣的书)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 2011-07-25
      • 2011-05-23
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多