gpt4 book ai didi

java - NoClassDefFoundError-非常奇怪的行为

转载 作者:行者123 更新时间:2023-12-02 02:50:47 26 4
gpt4 key购买 nike

在学习异常时,我尝试了以下步骤,发现了一个非常奇怪的行为。请查找以下步骤。

  • 创建了一个公共(public)类A
  • 创建一个类B
  • 已编译 AB
  • 在运行A之前删除了类B

完成上述步骤后,程序运行得非常好,并抛出 NoClassDefFoundError ,现在奇怪的是当我在 try block 内声明引用变量并运行程序时它再次抛出一个未捕获的 NoClassDefFoundError

public class A{
public static void main(String[] args) {
B m ;//Caught is getting printed if declare above try-catch()
try {
B m = new B();//Here Uncaught exception is throws
} catch (java.lang.NoClassDefFoundError ex) {
System.out.println("Caught!");
}
}
}

class B{

}

我真的不知道为什么会发生这种情况,请帮助我理解这一点

最佳答案

B 编译并生成字节码后,您将删除 A 的类文件。因此,B 的代码仍然引用 A,当您的 A 开始运行时,JVM 将尝试加载并初始化 B code> 创建对象时,由于在A的类路径中找不到该类,因此抛出NoClassDefinitionFoundException。

在第一种情况下,您只需声明对 B 的引用,JVM 不会尝试加载您的类,除非它确实需要它,所以您不会得到任何异常。

关于java - NoClassDefFoundError-非常奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43867305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com