正如我在一个线程中发现的那样 Java: Difference between Class.forName and ClassLoader.loadClass Class.forName() 将始终使用调用者的 ClassLoader,而 ClassLoader.loadClass() 可以指定不同的 ClassLoader
System.out.println(Class.forName("test.Employee").getClassLoader());
System.out.println(ClassLoader.getSystemClassLoader().loadClass("test.Employee").getClassLoader());
但是上面两行打印的是相同的结果
sun.misc.Launcher$AppClassLoader@7ced01
sun.misc.Launcher$AppClassLoader@7ced01
请解释原因。
最佳答案
对您来说没有什么区别,因为您当前的类是使用 SystemClassLoader 加载的,而 SystemClassLoader 恰好是 sun.misc.Launcher$AppClassLoader@7ced01
。
如果您使用不同的类加载器来加载类,则两种方法在使用不同的类加载器加载的类中使用时都会使用不同的类加载器。
关于java - 类加载样式的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23262067/