什么是ClassDefNotFoundException和NoClassDefFoundError并解释这两者之间的差异?
答案 0 :(得分:6)
通常,如果类无法初始化,则抛出NoClassDefFoundError
。
第一次使用某个类时,它正在初始化。如果由于某种原因失败,则抛出相关的异常。 http://java.sun.com/docs/books/jls/third_edition/html/execution.html#12.4
当再次使用该类时,已知它已损坏。不会再次尝试初始化。 JVM引发了神秘的NoClassDefFoundError
。没有真正描述问题,可能会让诊断混乱。如果抛出ClassInitFailedError
之类的东西会更好。
当您看到NoClassDefFoundError
时,您应该向后搜索日志,找到该类无法初始化的根本原因(希望它已记录)
标准Java lib中没有ClassDefNotFoundException,所以我不知道你在说什么。
答案 1 :(得分:2)
ClassNotFoundException
。 NoClassDefFoundError
在new
无法实例化类时发生,因为jvm无法初始化类。它可能是构造函数抛出异常,或静态块抛出,或版本不匹配。
答案 2 :(得分:-2)
核心Java - 什么是ClassDefNotFoundException和...