0

I have a Custom Classloader : CustomClassLoader(extends ClassLoader)

I have a class : IntegerPrint

I load my class with my Custom ClassLoader. I was expecting SOPs in the below code to return the same value. But the first SOP prints "sun.misc.Launcher$AppClassLoader@.." & second SOP prints "CustomClassLoader@.."

Why it happens so? Please advise.

public class IntegerPrinterTest { public static void main(String[] args) throws Exception { CustomClassLoader loader = new CustomClassLoader(IntegerPrinterTest.class.getClassLoader()); Class<?> clazz = loader.loadClass("IntegerPrinter"); System.out.println(IntegerPrinter.class.getClassLoader()); System.out.println(clazz.getClassLoader()); } } 

2 Answers 2

2

What did you expect? In

System.out.println(IntegerPrinter.class.getClassLoader()); 

you create a

 Class<IntegerPrint> 

object, and surely, its class (Class) must have been loaded by some class loader. It takes no genius to imagine that Class must have been loaded very early, even before your code even gains control.

Please run your example with

java -verbose:class .... 

to see which classes are laoded in what order.

Sign up to request clarification or add additional context in comments.

Comments

2

The first call:

IntegerPrinter.class.getClassLoader() 

Will actually do:

IntegerPrinterTest.class.getClassLoader().loadClass("IntegerPrinter") 

So it totally ignores your custom classloader. In other words: your own classloader is not actually used for any objects you create using native calls like "new" etc. To do that it should be responsible for loading the IntegerPrinter class as well.

It is rather circumspect (and in general useless) to do it in the same class but you could do:

Class<?> clazz = loader.loadClass("IntegerPrinterTest"); clazz.getMethod("main").invoke(null); 

(note this code is not tested but should approximate something that works)

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.