在学习异常的同时,我尝试了以下步骤并发现了一种非常奇怪的行为。请找到以下步骤。
A
B
A
和B
B
A
完成上述步骤之后,程序运行绝对正常并抛出NoClassDefFoundError
,现在奇怪的是当我在try
块中声明引用变量并再次运行程序时它抛出一个未被捕获的{ {1}}
NoClassDefFoundError
我真的不知道为什么会这样,请帮我理解这个
答案 0 :(得分:2)
在A
编译并生成字节码后,您正在删除B
的类文件。因此,B
的代码仍然引用A
,当您的A
开始运行时,JVM将尝试在创建对象时加载并初始化B
,因为它不能在A
的类路径中找到该类,它会抛出NoClassDefinitionFoundException。
在你的第一种情况下你只是声明对B
的引用,JVM不会尝试加载你的类,除非它确实需要它,所以你不会得到任何例外。