这些是完全一样的吗:
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/