老师,我再提一个问题<可能和本栏目无关> //
同一个类(类路径和包名都一模一样) 再两个jar包里面 ,然后一个项目引入这两个jar包. 执行这个项目用到这个类的时候 ,会选择那个类? 有什么优先级?
我自己测试的,
用maven项目,引入这两个jar包的时候,谁写在上面就调用谁 . 我把这个项目打成可执行文件, 也是按照maven中引入的顺序来的 . 我很奇怪 ,可执行jar里面并没有jar的加载顺序,为什么每次都调用指定的jar里面的类?
如果老师看见了 ,希望能解惑 .
//再stackoverflow上也提了一个单子,也是找不到答案
https://stackoverflow.com/questions/55035461/how-jvm-load-different-jars-but-same-package-name-and-class-name
展开
作者回复: 有点小疑问,为什么一个类放两个Jar文件里? 既然是同一个类,应用层为什么关心调用顺序?
具体的,这和class loader的实现方式有关。一旦一个类加载后,JVM就会使用已经加载的类。 你可以看看java.lang.ClassLoader的规范,里面有描述累加载的办法。
由于class loader是可以被扩展的,关于从哪个包加载,应用不要依赖猜测或者测试的结果,要不然,一旦实现改变,可能就是一个坑。