NoClassDefFoundError与ClassNotFoundException的区别
Thrown when an application tries to load in a class through its string name using:
The forName method in class Class.
The findSystemClass method in class ClassLoader .
The loadClass method in class ClassLoader.
but no definition for the class with the specified name could be found.
As of release 1.4, this exception has been retrofitted to conform to the general purpose exception-chaining mechanism. The "optional exception that was raised while loading the class" that may be provided at construction time and accessed via the getException() method is now known as the cause, and may be accessed via the Throwable.getCause() method, as well as the aforementioned "legacy method."
See Also:
java.lang.Class.forName(java.lang.String)
java.lang.ClassLoader.findSystemClass(java.lang.String)
java.lang.ClassLoader.loadClass(java.lang.String, boolean)
这个描述的大概意思就是当通过一个类名去寻找并装载一个类的时候,如果找不到,则抛出ClassNotFoundException异常。
java.lang.NoClassDefFoundError
Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.
The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.
大体意思就是当JVM或者ClassLoader实例试着装载目标class的definition的时候(方法调用,或者构造对象的时候都有可能),但是却找不到lass的definition的时候抛出java.lang.NoClassDefFoundError。 目标的class definition在这个class被编译的时候是存在,但是因为其他原因而找不好了。
根据上面的注释,有一种情况我以为会调用ClassNotFoundException的时候却调用的是java.lang.NoClassDefFoundError。
一个测试类为
package com.liusu.classloader;
public class ClassLoaderTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Hello world");
}
private static void sleep(int second) {
try {
Thread.sleep(1000 * second);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
进入sh,进入目录结构com.liusu.classloader
javac *.java
然后就在此处,执行:(不设置classpath)
java ClassLoaderTest
抛出:
Exception in thread "main" java.lang.NoClassDefFoundError: ClassLoaderTest (
wron
g name: com/liusu/classloader/ClassLoaderTest)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
分享到:
相关推荐
Java中的`ClassNotFoundException`异常通常表示在尝试加载特定类时,JVM无法找到对应的字节码文件。这个异常可能由多种原因引起,但在本场景中,它与Java 9引入的模块系统及其对Java EE API的影响密切相关。 在Java...
这将创建一个连接池,用于与指定的MySQL数据库建立连接。记得在不再需要连接池时调用`dataSource.close()`来释放资源。 总之,要解决`java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource`...
java.lang.NoClassDefFoundError: com/sun/activation/registries/LogSupport异常处理
与ClassNotFoundException的区别 NoClassDefFoundError和ClassNotFoundException都是Java中的类加载错误,但是它们之间有着明显的区别。ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的...
标题 "NoClassDefFoundError: jxl/WorkbookSettings" 是一个常见的Java运行时错误,意味着在尝试执行程序时,系统无法找到某个类的定义。这个错误通常发生在类路径(ClassPath)配置不正确或者缺少了必要的库依赖时...
如果文件名与类名不符,编译器可能能够成功编译,但运行时会因为找不到正确的类定义而抛出`NoClassDefFoundError`。 ### 解决方法: 确保源文件名与公共类名完全一致,检查文件名的拼写和大小写是否正确。 ### 2. ...
JVM类加载跟踪器,用于排查jar包冲突、类冲突、类版本冲突、NoClassDefFoundError、ClassNotFoundException 等等类加载相关问题的辅助工具
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:...
`NoClassDefFoundError` 是Java运行时异常的一种,与`ClassNotFoundException`不同,它意味着类在编译时存在,但在运行时却无法找到。这个问题可能由于多种原因引起,如依赖缺失、类路径设置不正确或者类加载器问题...
检查项目中的所有依赖,确保它们相互兼容,并且与使用的Spring和JPA版本匹配。 5. **OSGi环境问题**:在OSGi环境下,类加载机制不同于传统的Java应用。每个bundle有自己的类加载器,因此需要确保依赖的bundle已经...
### Java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory #### 错误概述 在给定的日志片段中,出现了一个常见的Java运行时错误:“`java.lang.NoClassDefFoundError: org/apache/commons/...
### Java中的`java.lang.NoClassDefFoundError`: javax/mail/Message #### 错误概述 在Java编程过程中遇到`java.lang.NoClassDefFoundError`是一个常见的问题,这种异常通常发生在试图加载一个类时,该类在编译时...
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` 是一个常见的运行时异常,它发生在类加载器尝试加载一个在编译时存在但在运行时找不到的类定义时。这个错误通常意味着类路径设置不正确或者依赖项没有正确地被包含...
`NoClassDefFoundError`往往与构建工具有关,如Maven或Gradle,它们负责管理项目的依赖关系。 提供的压缩包文件包含以下几个库: 1. `commons-collections-3.2.jar`:Apache Commons Collections,提供了对Java集合...
JavaMail的java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream错误 原因: MyEclipse6.5的javaee.jar中的mail包与JavaMail包有冲突。 解决: 在MyEclipse目录下(D:\Program Files\MyEclipse ...
3. **确认版本匹配**:确保使用的 `ezmorph` 版本与项目中的其他依赖兼容。不同版本的库可能会有API变更,不兼容的版本可能导致类似的问题。 4. **清理并重建**:在更新依赖后,清除构建缓存并重新构建项目,确保...