加载类时java运行时错误

标签 java linker classloader

我会尽力解释我们遇到的具体情况。如果你们还有其他问题,请告诉我。我不知道这是java链接问题还是java加载问题。

我使用外部 jar 文件编译了代码,该文件在执行过程中发生了变化。 我在代码中引用了一个名为“Contract”的类文件。我在编译时使用的库有一个从“BaseContract”类扩展的“Contract”类。但是我在执行时使用的库没有父类(super class)(“BaseContract”)。在运行时,我收到一条错误消息,指出未找到 BaseContract 类。可以说,引用“Contract”类的类称为“AppClass”。

在编译时,java是否将其所有引用的类的类层次结构存储在正在编译的类文件中。在我的具体示例中,java是否将“Contract”类的类层次结构存储在AppClass.class文件中?如果是这样,为什么java还要在这里存储类层次结构呢?将类“Contract”层次结构存储在 Contract.class 文件中而不是存储在 AppClass.class 文件中不是更有效吗?

非常感谢任何帮助或指示。

最佳答案

不,事实并非如此。每个类只知道它自己的类层次结构。然而,它也知道何时进行方法调用、创建对象等、该方法的预期签名、该对象的类型等。

如果没有任何内容符合该期望,那么您将收到找不到类错误(或其他类似错误,具体取决于未匹配的内容)。

关于加载类时java运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21099700/

相关文章:

java - 将给定的类(比方说,java.lang.Object)转换为字节数组。是否可以?

unit-testing - 如何在 Maven 中使用不同的 JAR 进行编译和测试?

java - jstring转c++字符串结果java代码执行报错

java - 通过几个简单标准进行验证的 validator 类 - 这是上帝对象吗?

c++ - xcode 中的子文件夹。链接

c++ - 错误的函数名称重整

c - 使用外部指针声明外部函数时出错

java - 如何在 java 中找到匿名类的 GC 根?

java - 从拦截器 token 撤回http请求无效

java - Spring Boot JSP 错误 : NoClassDefFoundError