what class loader is used?

classloader, contextclassloader, java

Solution

Both use the current `ClassLoader`. As DNA correctly points out, http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#forName%28java.lang.String%29 states that `Class.forName()` uses the current class loader. A little experiment shows that a class loaded for instantiation using the `new` statement also uses the current `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());
    }
}

In `Test` we set the current's thread ContextClassLoader to some custom `ClassLoader` and then instantiate an object of class `SomeClass`. In `SomeClass` we print out the current thread's ContextClassLoader and the `ClassLoader` that loaded this object's class. The result is

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

indicating that the current `ClassLoader` (`sun.misc.Launcher.AppClassLoader`) was used to load the class.

Problem

I have several questions regarding to class loaders. ``` Class.forName("class.name"); ``` and ``` .... NotYetLoadedClass cls = new NotYetLoadedClass(); ..... ``` What class loaders will be used in each case? For the first case I assume class loader that was used to load class in which method code is executing. And in the second case I assume thread context class loader. In case I am wrong, a small explanation is appreciated.

Original source

Related problems