实验目的
- 2个jar包中,各有一个类名完全相同的类Test,此时,如果一个工程中同时引入这2个jar包,那么此时工程中调用此Test时,它到底调用哪个jar包的Test类。
新建一个工程,里面有一个类Jar1
public class Jar1 { public void print(){ System.out.println("Test_1"); } }
用此类生成2个不同名称的jar包,一个打印 Test_1,一个打印Test_2,jar包的名称分别对应Test_1.jar,Test_2.jar.
新建一个工程
建立类Testjar.java,将上面建立的2个jar都引入
public class TestJar { public static void main(String[] args){ new Jar1().print(); } }
jar的顺序是testjar_1,testjar_2
执行程序
此时打印J信息为 “Test _ 1”,即引用了testjar_1包中的类
实验二:
将jar名字互换:testjar_1 -> testjar_2 , testjar_2 -> testjar_1
执行man
此时打印信息为 “Test_2”
结论:在同一个文件夹下,jar包是按顺序从上到下依次加载(即在Referenced Libraries顺序加载),如果已经找到,则不会再后续jar包中进行查找。
参考文献:
- tomcat中class和jar的加载顺序 简单明了说明Tomcat下包的加载顺序
- Java虚拟机类加载顺序 详细说明ClassLoader的加载顺序和原理