最明显的区别:
The difference between the two is that one is an Error
and the other is an Exception
.
ClassNotFoundException一般在ClassLoader去加载的时候如果找不到,直接在加载器里面就跑出了异常,注意是在loader里面抛出来的
NoClassDefFoundError一般是用户类A类引用了自己公司开发的某个框架类B类(B类一般会在jar包里面),而B类里面一般情况会引用第三方著名的jar包,比如commons-log.jar等等,如果你只把包含B类的jar包放入了web-inf/lib,而第三方的commons-log.jar没用放入,虽然编译时成功了,没用问题,可是运行的时候解析B类的时候,B类依赖于C类,而C类找不到,就会抱这个错误
举一个最容易理解的例子
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
Class c = Class.forName("com.mycompany.framework.VeryStrong");
System.out.println(c);
}
}
上面是用户的Class,依赖的com.mycompany.framework.VeryStrong作为jar包放入web-inf/lib下面和classpath下面,编译没问题,一切正常
不幸的是,com.mycompany.framework.VeryStrong中声明了一个变量叫public static final Logger log = Logger.getLogger(VeryStrong.class);
在用户servlet被访问的时候,异常抛了出来
这个异常是在VeryStrong中抛出的,因为加载他的时候引用的类没用找到,所以抛出
java.lang.NoClassDefFoundError: org/apache/log4j/Logger
com.mycompany.framework.VeryStrong.<clinit>(VeryStrong.java:36)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Unknown Source)
com.ht.xu.HelloWorldServlet2.doGet(HelloWorldServlet2.java:30)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
这个类是在java.net.URLClassLoader类抛出的,因为去load的时候没用找到
java.lang.ClassNotFoundException: org.apache.log4j.Logger
java.net.URLClassLoader$1.run(Unknown Source)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
java.lang.ClassLoader.loadClass(Unknown Source)
com.mycompany.framework.VeryStrong.<clinit>(VeryStrong.java:36)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Unknown Source)
com.ht.xu.HelloWorldServlet2.doGet(HelloWorldServlet2.java:30)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
分享到:
相关推荐
Java中的`ClassNotFoundException`异常通常表示在尝试加载特定类时,JVM无法找到对应的字节码文件。这个异常可能由多种原因引起,但在本场景中,它与Java 9引入的模块系统及其对Java EE API的影响密切相关。 在Java...
在Java编程中,`java.lang.ClassNotFoundException` 是一个常见的运行时异常,通常发生在尝试通过类加载器加载指定类时,但找不到对应的字节码文件。在这个特定的问题中,`ClassNotFoundException` 引发的原因是缺少...
java.lang.NoClassDefFoundError: com/sun/activation/registries/LogSupport异常处理
JVM类加载跟踪器,用于排查jar包冲突、类冲突、类版本冲突、NoClassDefFoundError、ClassNotFoundException 等等类加载相关问题的辅助工具
ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误,而NoClassDefFoundError是在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就...
标题 "NoClassDefFoundError: jxl/WorkbookSettings" 是一个常见的Java运行时错误,意味着在尝试执行程序时,系统无法找到某个类的定义。这个错误通常发生在类路径(ClassPath)配置不正确或者缺少了必要的库依赖时...
此错误不同于ClassNotFoundException,后者发生在尝试加载一个类而类路径(classpath)中找不到该类时;而NoClassDefFoundError则是在JVM认为类已经存在,但在实际运行时却找不到的情况下抛出的。下面,我们将深入探讨...
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig at org.apache.hadoop.yarn.client.api.TimelineClient.createTimelineClient(TimelineClient.java:...
标题 "java.lang.NoClassDefFoundError: javax/persistence/EntityListener" 提到的问题是一个常见的Java运行时异常,通常表示在类加载时找不到指定的类定义。这个错误在Java应用程序或Web应用中出现,可能是因为...
### Java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory #### 错误概述 在给定的日志片段中,出现了一个常见的Java运行时错误:“`java.lang.NoClassDefFoundError: org/apache/commons/...
java.lang.NoClassDefFoundError: de/javakaffee/kryoserializers/CurrencySerializer
NoClassDefFoundError: org/slf4j/LoggerFactory解决方案,需要添加的三个jar包都在,slf4j-api-1.5.2,slf4j-log4j12-1.5.2,log4j-1.2.12
### Java中的`java.lang.NoClassDefFoundError`: javax/mail/Message #### 错误概述 在Java编程过程中遇到`java.lang.NoClassDefFoundError`是一个常见的问题,这种异常通常发生在试图加载一个类时,该类在编译时...
标题中的“JSON中,java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决”指的是一类常见的Java运行时错误,当尝试加载一个类时,如果Java虚拟机(JVM)找不到该类的定义,就会抛出`...
他们提供的见解有助亍理解和解决常见的 Java 异常,例如 NoClassDefFoundError 和 ClassNotFoundException,以及更有挅戓性的问题,例如类装入器约束迗反和死锁。在第 1 部分中,他们详细描述了 Java 类装入的工作...
在Java编程中,`java.lang.NoClassDefFoundError` 是一个常见的运行时错误,它发生在类加载器尝试执行一个类,但在类路径中找不到该类的定义时。在这个特定的场景中,问题聚焦于 `net.sf.ezmorph.Morpher` 类。`...
在Java编程中,`java.lang.NoClassDefFoundError` 是一个常见的运行时异常,它发生在类加载器尝试加载一个在编译时存在但在运行时找不到的类定义时。这个错误通常意味着类路径设置不正确或者依赖项没有正确地被包含...