2014-11-24 64 views
1

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

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

是否有可能,如果我是通过调用类加载器x1.y1.Classx2.y2.Class负荷呢?

+1

你的意思是不小心?或者这就是你想要达到的目标? – 2014-11-24 06:45:39

+0

yups ..意外..其他任何可能性 – vegeta 2014-11-24 06:46:16

+0

否..除非你做错了,否则不会发生。 – TheLostMind 2014-11-24 06:48:25

回答

5

简单地说,没有(除非你无意中加载了错误的)。

类由他们的完全限定类名,其中包括包装(如x1.y1.Class

4

不,这不可能发生,原因有二:

  • 的类加载器认定通过在正确的位置寻找类,
  • 即使您意外地将类放在错误的地方,类文件本身也会包含包名,并且会在类加载过程中对其进行检查。

我只是试着故意这样做,用文件替换为p1/Foo.classp2.Foo,并收到以下错误:

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

如果你想做到这一点,你需要一个有意查看错误位置的类加载器,然后修改它加载的字节码。