If you want to access the ClassLoader object of a given class object, you can use the following logic:
Class cls = obj.getClass();
ClassLoader loader = cls.getClassLoader();
If you want to access the ClassLoader object of a given class name, you can use the following logic:
Class cls = Class.forName(className);
ClassLoader loader = cls.getClassLoader();
Here is tutorial example program on how to example JVM built-in ClassLoaders and access the Classloader of a given class:
/**
* ClassloaderTest.java
* Rishi Sharma
*/
class ClassloaderTest {
public static void main(String[] a) {
java.io.PrintStream out = System.out;
Object o = null;
Class c = null;
ClassLoader l = null;
l = ClassLoader.getSystemClassLoader();
out.println("");
out.println("Built-in ClassLoaders");
out.println("System ClassLoader: "+l.getClass().getName());
l = l.getParent();
out.println("Extensions ClassLoader: "+l.getClass().getName());
l = l.getParent();
out.println("Bootstrap ClassLoader: "+l);
o = new java.lang.String();
c = o.getClass();
l = c.getClassLoader();
out.println("");
out.println("ClassLoader for java.lang.String: "+l);
o = new ClassloaderTest();
c = o.getClass();
l = c.getClassLoader();
out.println("");
out.println("ClassLoader for ClassLoaderTest: "
+l.getClass().getName());
}
}
When executed on Linux system with JDK 1.7.0, I got this result:
Built-in ClassLoaders
System ClassLoader: sun.misc.Launcher$AppClassLoader
Extensions ClassLoader: sun.misc.Launcher$ExtClassLoader
Bootstrap ClassLoader: null
ClassLoader for java.lang.String: null
ClassLoader for ClassLoaderTest: sun.misc.Launcher$AppClassLoader
The test result confirms that:
- The System Classloader is implemented by the sun.misc.Launcher$ExtClassLoader class.
- The Extensions Classloader is implemented by the sun.misc.Launcher$AppClassLoader class.
- The Bootstrap Classload is represented as null.
- java.lang.String is a system class, stored in <JAVA_HOME>/lib/rt.jar, and loaded by the Bootstrap ClassLoader.
- sun.security.pkcs11.P11Util is an extension class, stored in <JAVA_HOME>/lib/ext/sunpkcs11.jar, and loaded by the Extensions ClassLoader.
- ClassLoaderTest is my own class, stored in ./ClassloaderTest.class, and loaded by the System ClassLoader.
And this also tell me that even after 2 years of owning Java , Oracle still have not got sun.misc fixed.
No comments:
Post a Comment