假设我在ext
文件夹中有一个包含不同版本的jar,另一个版本在classpath
中。罐装哪个版本?根据我的研究,由于extension classloader
在classpath
之前运行,因此将加载扩展中的库。或者它会覆盖classpath
。如果版本相同会发生什么?
答案 0 :(得分:1)
它将使用它可以在ClassLoader
层次结构中找到的第一个类。
所以它会尝试从下一个ClassLoader
s序列中获取该类:
ClassLoader
由 Bootstrap类(rt.jar
以及{{1}中的其他几个重要jar
文件组成}})。jre/lib
由扩展程序类(扩展文件夹ClassLoader
中的jar
个文件)组成。jre/lib/ext
由用户类(定义在类路径中的类)组成。因为你的类没有在#1中定义,而是在#2和#3中定义,它可以找到的第一个类将在#2中,所以它将获得扩展文件夹的版本并且只是忽略定义的那个稍后在你的类路径中。
答案 1 :(得分:1)
这将是班级而不是Jar级别。如果类(完全限定的类名)已经加载到vm,那么将忽略ext或类路径libs类中的新类。