tomcat中java加载类的顺序

仅仅是对tomcat的测试结果,其它容器不得而知
package相同的class是先加载/web-inf/class下的呢,还是调用web-inf/lib下的jar包呢
做以下测试

package info.frady;
public class Person {
public static void PrintPerson(){
System.out.println("PrintPerson");
}
}


package info.frady;
import info.frady.Person;
public class Ptest {
public static void PrintInfo(){
System.out.println("Ptest.PrintInfo");
Person.PrintPerson();
}
}


package test;
import info.frady.Ptest;
public class PacakgeTest {
public static void main(String[] args) {
Ptest.PrintInfo();
}
}

以上代码的运行结果是
Ptest.PrintInfo
PrintPerson
将以上的代码打包成jar,放到/web-inf/lib目录下
然后修改代码为

package info.frady;
public class Person {
public static void PrintPerson(){
System.out.println("PrintPerson2");
}
}


package info.frady;
import info.frady.Person;
public class Ptest {
public static void PrintInfo(){
System.out.println("Ptest.PrintInfo2");
Person.PrintPerson();
}
}


package info.frady;
public class Person {
public static void PrintPerson(){
System.out.println("PrintPerson2");
}
}


package test;
import info.frady.Ptest;
public class PacakgeTest {
public static void main(String[] args) {
Ptest.PrintInfo();
}
}

以上代码的运行结果是
Ptest.PrintInfo2
PrintPerson2

最后一次,修改

package info.frady.m;
import info.frady.Person;
public class Ptest {
public static void PrintInfo(){
System.out.println("Ptest.PrintInfo2");
Person.PrintPerson();
}
}

运行PacakgeTest,结果是什么?
Ptest.PrintInfo
PrintPerson2

以上测试,结果证明,class里面的代码一定会被优先找到,即使是lib里jar包的代码要调用相同package的代码,只要class里重写了,那么就会执行class里的

以上顺序,方便了我们对一些现有lib包的重写,只要重新对应的class,程序就会自动加载自写的代码,而不使用lib包下的代码。

你可能感兴趣的:(其它java技术)