I am trying to debug a very strange class error by looking at the ClassLoaders for some dynamically created components. ClassLoaders are something I’ve never played much with – and im surprised that standard JDK classes have null Class loader instances.
Can somebody explain the output of this simple main method in terms of the classes whose loaders I am attempting to print, and also more generally:
- the way
ClassLoaders work on the JVM and - how we can debug missing classes using
ClassLoaders.
public class MyClass {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(relfect.MyClass.class.getClassLoader());
System.out.println(String.class.getClassLoader());
System.out.println(ArrayList.class.getClassLoader());
System.out.println(JButton.class.getClassLoader());
System.out.println(System.class.getClassLoader());
Boolean b = new Boolean(true);
System.out.println(b.getClass().getClassLoader());
}
}
Output
sun.misc.Launcher$AppClassLoader@1f7182c1
null
null
null
null
null
The javadoc for
getClassLoader()saysSo, that at least explains why you get that result. But it does not explain why the implementors decided to do it that way.
EDIT:
After testing adding my own classes to the bootclasspath then they also show up as null class loader.