这些是完全一样的吗:

ClassLoader.getSystemClassLoader() // 1

vs:
obj.getClass().getClassLoader().getSystemClassLoader() // 2
Person.class.getClassLoader().getSystemClassLoader()

是否有可能产生不同结果的情况?

最佳答案

按照 ClassLoader.getSystemClassLoader() javadoc,这通常是用于启动应用程序的类加载器。 java.system.class.loader属性可用于覆盖返回的类加载器,但是:



在更复杂的设置中,obj.getClass().getClassLoader()Person.class.getClassLoader()可以返回自定义类加载器,例如OSGI。这个自定义类加载器完全取决于返回系统类加载器。它
可能不选择因为它将绕过OSGI边界类的加载边界,所以请参见this answer

因此,大多数情况下它们应该是相同的,但是没有什么可以阻止您配置JVM或编写会使它们与众不同的软件。

关于java - ClassLoader.getSystemClassLoader()与obj.getClass()。getClassLoader()。getSystemClassLoader(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54037306/

10-10 05:28