我现在正在学习Java和OSGi,所以我已经读了几本书。在一本特殊的书中描述了类的加载。
你可以从作者页面(Neil Bartlett)下载它(免费和合法):OSGi Book
在第9页和第10页上是这些图片:
alt text http://img265.imageshack.us/img265/4127/picture1qct.pngalt text http://img297.imageshack.us/img297/594/picture2yv.png
似乎我们的类"Foo“不会使用foobar.jar的"Bar”类,而是使用naughty.jar的"Bar“类。
由于Java类路径的扁平和全局结构,这可能是,但据我所知,您将定义一个包,您希望从其中导入某个类:
import foobar.Bar这应该可以防止加载错误的类,不是吗?当然,假设这个包被称为"foobar“。
发布于 2010-04-14 07:42:10
import语句与类加载无关-它只允许您使用短名称Bar而不是完全限定的foobar.Bar。如果foobar.jar和naughty.jar都包含完全限定名为foobar.Bar的类,则类加载器将从类路径上具有所需类的第一个jar文件中加载类。
发布于 2010-04-14 07:38:17
好主意,但不幸的是,包独立于jar文件名。您可以将任意包中的内容全部放在同一个jar文件中,也可以将任意jar文件名与不相关的包名放在一起。这取决于类加载器为您解决这些问题。
发布于 2010-04-14 07:45:23
问题是foobar.jar和naughty.jar可能都有一个全限定名为foobar.Bar的类。然后foobar.Foo解析naughty.jar的foobar.Bar,而不是foobar.jar的foobar.Bar。
希望这能有所帮助。
https://stackoverflow.com/questions/2633888
复制相似问题