我会尽力解释我们遇到的确切情况。如果你们有其他问题,请告诉我。我不知道这是java链接问题还是java加载问题。
我使用外部jar文件编译了代码,该文件在执行期间已更改。 我在我的代码中引用了一个名为“Contract”的类文件。我在编译时使用的库有一个“Contract”类,它从“BaseContract”类扩展而来。但是我在执行时使用的库没有超类(“BaseContract”)。在运行时,我收到一个错误,说找不到BaseContract类。举个例子,引用“契约”类的类称为“AppClass”。
在编译时,java是否将所有引用类的类层次结构存储在正在编译的类文件中。在我的具体示例中,java是否在AppClass.class文件中存储“Contract”类的类层次结构?如果是这样,为什么java必须在这里存储类层次结构。将类“Contract”层次结构存储在Contract.class文件而不是AppClass.class文件中是否效率更高?
非常感谢任何帮助或指示。
答案 0 :(得分:1)
不,它没有。每个类只知道它自己的类层次结构。但是它也知道何时进行方法调用,创建对象等该方法的预期签名,该对象的类型等。
如果没有任何内容可以匹配该期望,那么您将获得未找到类错误(或其他类似错误,具体取决于未命中匹配的内容)。