NoClassDefFoundErrorClassNotFoundException有什么区别?

是什么导致它们被抛出?如何解决?

在修改现有代码以包含新的jar文件时,我经常遇到这些throwables。
我在客户端和服务器端都通过Webstart分发了一个Java应用程序。

我遇到的可能原因:

代码客户端的build.xml中未包含的

  • 软件包
    我们正在使用
  • 的新jar缺少
  • 运行时类路径
  • 版本与以前的jar
  • 冲突

    今天,当我遇到这些问题时,我会采取错误的方法来使事情正常进行。我需要更多的清晰度和理解。

    最佳答案

    与Java API规范的区别如下。

    对于 ClassNotFoundException :



    对于 NoClassDefFoundError :



    因此,似乎在成功编译源代码时出现了NoClassDefFoundError,但是在运行时未找到所需的class文件。这可能是在分发或生成JAR文件时发生的,其中未包含所有必需的class文件。

    至于ClassNotFoundException,似乎可能是由于在运行时尝试对类进行反射性调用而引起的,但程序尝试调用的类不存在。

    两者之间的区别在于,一个是Error,另一个是ExceptionNoClassDefFoundErrorError,它来自Java虚拟机,它在查找期望找到的类时遇到问题。由于找不到class文件,或者与编译时生成或遇到的ClassNotFoundException文件不同,预期无法在编译时运行的程序无法运行。这是一个非常严重的错误,因为该程序无法由JVM启动。

    另一方面,Exception是ojit_code,因此在某种程度上是可以预期的,并且可以恢复。使用反射是容易出错的(因为有些期望可能不会按预期进行。没有编译时检查以确保所有必需的类都存在,因此查找所需类的任何问题都会在运行时出现。

    07-26 05:10
    查看更多