Java类加载

时间:2014-11-24 06:44:06

标签: java classloader

我有一个属于2个不同包的同一个类。

package x1.y1.Class
packgage x2.y2.Class

如果我通过类加载器调用x1.y1.Class,是否可能会加载x2.y2.Class

2 个答案:

答案 0 :(得分:5)

简单地说,(除非您无意中加载了错误的一个)。

类由其完全限定的类名加载,其中包含包(例如x1.y1.Class

答案 1 :(得分:4)

不,它不可能发生,原因有两个:

  • 类加载器通过查找正确的位置来查找
  • 即使您不小心将一个类放在了错误的位置,类文件本身也包含了包名,并且在类加载期间会检查它。

我只是故意尝试这样做,将p1/Foo.class替换为类p2.Foo的文件,并收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: p1/Foo (wrong name: p2/Foo)

如果您想要这样做,您需要一个故意查找错误位置的类加载器,然后修改它加载的字节码。