NoClassDefFoundError-非常奇怪的behaiour

时间:2017-05-09 10:25:51

标签: java exception-handling

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

  • 创建了公共类A
  • 创建课程B
  • 已编译AB
  • 在运行B
  • 之前删除了课程A

完成上述步骤之后,程序运行绝对正常并抛出NoClassDefFoundError,现在奇怪的是当我在try块中声明引用变量并再次运行程序时它抛出一个未被捕获的{ {1}}

NoClassDefFoundError

我真的不知道为什么会这样,请帮我理解这个

1 个答案:

答案 0 :(得分:2)

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

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