Какой класс загрузчик используется?

У меня есть несколько вопросов, касающихся загрузчиков классов.

Class.forName("class.name");

а также

....
NotYetLoadedClass cls = new NotYetLoadedClass();
.....

Какие загрузчики классов будут использоваться в каждом случае? В первом случае я предполагаю, что загрузчик классов использовался для загрузки класса, в котором выполняется код метода. А во втором случае я предполагаю загрузчик класса контекста потока.

В случае, если я не прав, небольшое объяснение приветствуется.

1 ответ

Решение

Оба используют текущий ClassLoader, Как правильно указывает ДНК, http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html утверждает, что Class.forName() использует текущий загрузчик классов. Небольшой эксперимент показывает, что класс, загруженный для реализации с использованием new Заявление также использует текущий ClassLoader:

public class Test
{
    public static void main(String[] args) throws Exception
    {
        Thread.currentThread().setContextClassLoader(new MyClassLoader());
        SomeClass someClass = new SomeClass();
        someClass.printClassLoader();
    }

    public static class MyClassLoader extends ClassLoader
    {
        public MyClassLoader()
        {
            super();
        }

        public MyClassLoader(ClassLoader parent)
        {
            super(parent);
        }
    }
}



public class SomeClass
{
    public void printClassLoader()
    {
        System.out.println(this.getClass().getClassLoader());
        System.out.println(Thread.currentThread().getContextClassLoader());
    }
}

В Test мы устанавливаем текущий поток ContextClassLoader на некоторые пользовательские ClassLoader а затем создать экземпляр объекта класса SomeClass, В SomeClass мы распечатываем ContextClassLoader текущего потока и ClassLoader который загрузил класс этого объекта. Результат

sun.misc.Launcher$AppClassLoader@3326b249
test.Test$MyClassLoader@3d4b7453

показывая, что текущий ClassLoader (sun.misc.Launcher.AppClassLoader) был использован для загрузки класса.

Другие вопросы по тегам