尽管这可能是由于编译时和运行时间之间的类路径不匹配造成的,但这不一定是由这个造成的。
在这种情况下,保持两三种不同的例外是很重要的:
- java.lang.ClassNotFoundException 这个异常表明该类在类路径中找不到。这表明我们正在尝试加载类定义,并且该类不存在于类路径中。
- java.lang.NoClassDefFoundError 这个异常表明JVM在其内部类定义数据结构中查找类的定义,但没有找到它。这与说不能从类路径加载不同。通常这表明我们以前试图从类路径加载一个类,但由于某种原因它失败了 - 现在我们试图再次使用这个类(因此需要加载它,因为它上次失败了),但是,甚至不会尝试加载它,因为我们之前加载失败(并且有理由怀疑我们会再次失败)。早期的失败可能是一个ClassNotFoundException或一个ExceptionInInitializerError(表示静态初始化块失败)或任何其他问题。重点是,NoClassDefFoundError不一定是类路径问题。