Java Class.forName () против Thread.currentThread (). GetContextClassLoader (). LoadClass () - PullRequest
3 голосов
/ 12 ноября 2011

Может кто-нибудь объяснить мне разницу между 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 Ответ

2 голосов
/ 12 ноября 2011

ClassLoader.loadClass(String) не разрешает класс (и, следовательно, не инициализирует его).

Class.forName(String) с другой стороны делает инициализировать класс.Вот почему вы видите, что инициализаторы запускаются в этом случае, но не при использовании loadClass.

Шаги загрузки / ссылки / инициализации описаны в JSL в разделе Исключение Вы хотите детали (это интересно читать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...