What’s the differences between ClassNotFoundException and NoClassDefFoundError
坦白说,这两者之间有什么区别,以前没有去特意留意过。前些天,QA小姑娘问到我 NoClassDefFoundError 这个错误,我就顺便对比了一下这两者。
从 Java API 文档中,我们其实可以看出一些端倪。
ClassNotFoundException:
文档中写到:
当应用程序试图使用以下方法通过字符串名加载类时,抛出该异常:
Class类中的forName方法。ClassLoader类中的findSystemClass方法。ClassLoader类中的loadClass方法。
但是没有找到具有指定名称的类的定义。
显然,这些方法在编译期是不会检查Class定义是否存在,而只会在 runtime 期间抛出这个异常。
NoClassDefFoundError
当 Java 虚拟机或 ClassLoader 实例试图在类的定义中加载(作为通常方法调用的一部分或者作为使用 new 表达式创建的新实例的一部分),但无法找到该类的定义时,抛出此异常。
当前执行的类被编译时,所搜索的类定义存在,但无法再找到该定义。
也就是,该类在编译时还是存在并且能找到,但在运行期却找不到对应的class导致加载失败,抛出了该异常。
By javafuns on November 12, 2009 at 22:15 ·
Views: 142 · Permalink
Categorized in: Java · Tagged with: Java
Categorized in: Java · Tagged with: Java


(