What’s the differences between ClassNotFoundException and NoClassDefFoundError

坦白说,这两者之间有什么区别,以前没有去特意留意过。前些天,QA小姑娘问到我 NoClassDefFoundError 这个错误,我就顺便对比了一下这两者。

从 Java API 文档中,我们其实可以看出一些端倪。

ClassNotFoundException:

文档中写到:

当应用程序试图使用以下方法通过字符串名加载类时,抛出该异常:

但是没有找到具有指定名称的类的定义。

显然,这些方法在编译期是不会检查Class定义是否存在,而只会在 runtime 期间抛出这个异常。

NoClassDefFoundError

当 Java 虚拟机或 ClassLoader 实例试图在类的定义中加载(作为通常方法调用的一部分或者作为使用 new 表达式创建的新实例的一部分),但无法找到该类的定义时,抛出此异常。

当前执行的类被编译时,所搜索的类定义存在,但无法再找到该定义。

也就是,该类在编译时还是存在并且能找到,但在运行期却找不到对应的class导致加载失败,抛出了该异常。

By javafuns on November 12, 2009 at 22:15 · Views: 142 · Permalink
Categorized in: Java · Tagged with: 
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Leave a Reply


  • Highest Rated

  • My PicasaPhotos

    facebook7.JPG

    IMG_0569.JPG

    60320ef34907e2d80b46e079.jpg

  • RSS My del.icio.us

  • My RSS