NoClassDefDoundErr与ClassNotFoundException区别
作者:langm
版权声明:本文可以自由转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
作者:langm
原文:http://www.matrix.org.cn/resource/article/44/44056_NoClassDefDoundErr.html
关键字:NoClassDefDoundErr ClassNotFoundException
在读这篇文章之前,你最好了解一下Java的Exception机制。
也许你在开发的过程中经常地见到ClassNotFoundException和NoClassDefFoundErr这两个异常,每每看到之后,都会一概而论的是类没有找到,但有些时候见到他们的时候又有些疑惑(至少我是这样),为什么Java要用两个异常来表示类定义没有找到那?他们之间有什么区别那?
正巧今天我又碰到了这个问题,顺便的仔细研究了一下这两个异常的区别。
首先:
ClassNotFoundException直接继承与Exception,它是一个checked的异常。
NoClassDefFoundErr 继承自Error->LinkageError ,它是一个unchecked的异常。
下面让我们看一下两个异常在API文档中的说明
ClassNotFoundException:
当应用尝试用字符串名称通过下面的方法装载一个类时这个类的定义却没有找到时会抛出的异常。
Class.forName
ClassLoader.findSystemClass
ClassLoader.loadClass
NoClassDefFoundErr:
当JVM或者ClassLoader实例尝试装载一个类的定义(这通常是一个方法调用或者new表达式创建一个实例过程的一部分)而这个类定义并没有找时所抛出的错误。
当编译的时候可以找到这个类的定义,但是以后这个类不再存在。
这比较显而易见了吧,读好文档是很重要的事情。这里我就说一下我对这两个类的区别的理解。
ClassNotFoundException异常只出现在你的应用程序主动的装载类的过程中,这个异常很多时候出现在我们的应用框架在初始化或者运行中动态装载已配置的类的过程中。这种情况下我们应该首先检查我们的配置或者参数是否错误,是否企图装载一个并不存在的类,如果配置没有错误,我们就应该查看Classpath是否配置错误而导致ClassLoader无法找到这个类,也应该检查要装载的类是否在一个jar包中而我们在引入这个jar包的过程中是否有遗漏或错误(这里jar包的版本也是一个需要格外注意的问题,很多时候混乱的jar包版本会造成太多的麻烦)。
NoClassDefFoundErr异常一般出现在我们编译环境和运行环境不一致的情况下,就是说我们有可能在编译过后更改了Classpath或者jar包所以导致在运行的过程中JVM或者ClassLoader无法找到这个类的定义(我曾经在编译后作了一次jar包的清理,然后应用就送给了我一个这样的礼物)。
我们经常用SDK开发应用,开发的过程中要引入很多jar包,有些SDK也会设定自己的Classpath。编译过程结束后在运行的过程中就要将已开发的应用和所有引入的jar包拷贝到应用服务器的相应目录下才可以运行,而应用服务器使用的Classpath也很有可能与SDK的不同,在这个过程中就有很大的几率造成双方环境不一致。所以很多开发者就会遇到在SDK中可以编译,运行也没有问题,但是同样的程序放到应用服务器上就出现NoClassDefFoundErr这个异常这种情况,这是让初学者很挠头的一个问题。
以上就是我对这两个异常的一点个人理解,希望对各位开发者有所帮助,可以让各位开发者在以后的开发过程中能够更快的找到问题所在。祝开发顺利
分享到:
相关推荐
`ClassNotFoundException` 是 Java 开发过程中常见的运行时异常,通常发生在尝试加载某个类时,系统无法在指定的类路径(ClassPath)中找到对应的 `.class` 文件。本文将深入探讨 `ClassNotFoundException` 的原因、...
Java中的`ClassNotFoundException`异常通常表示在尝试加载特定类时,JVM无法找到对应的字节码文件。这个异常可能由多种原因引起,但在本场景中,它与Java 9引入的模块系统及其对Java EE API的影响密切相关。 在Java...
在Java编程语言中,`ClassNotFoundException`是一个非常常见的运行时异常,它属于`java.lang.ClassNotFoundException`,当Java虚拟机(JVM)试图动态加载一个类并无法找到对应的.class文件时,就会抛出这个异常。...
确保脚本正确地将源代码(`src`目录)编译成类文件并将其与依赖库一起打包到最终的插件JAR中。 5. **源码和类文件布局**:`src`目录存放源代码,而`classes`目录通常是编译后的字节码文件。确保Ant或Maven等构建...
target=_blank>NoClassDefDoundErr与ClassNotFoundException区别</A> <LI><A title=深入MIDIetStateChangeException href="http://www.jspcn.net/htmlnews/11500199894531654.html" target=_blank>深入...
在Java服务器页面(JSP)开发中,可能会遇到`ClassNotFoundException`异常,这通常是由于系统无法找到或加载指定的类导致的。此异常通常与类路径配置、库引用或JDBC驱动有关。以下是一些解决此类问题的有效方法: ...
在Java编程中,`java.lang.ClassNotFoundException`是一个常见的运行时异常,它表示JVM尝试加载一个类时,找不到对应的.class文件。在这个特定的错误中,我们看到的是`org.apache.commons.dbcp.BasicDataSource`,这...
"java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver" 解决方案 [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 解决了jsp连接 sql server 2000的问题
6. **冲突的依赖**:如果项目中同时存在多个版本的Ezmorph或其他与之相关的库,可能会导致类加载冲突。确认所有依赖的版本兼容,并避免版本冲突。 在提供的压缩包子文件列表中,包含了解决这个问题所需的jar包,这...
然而,对于初学者来说,遇到错误是常有的事,比如“java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource”。这个异常表明在运行时,系统无法找到指定的类,即Apache Commons DBCP的...
这将创建一个连接池,用于与指定的MySQL数据库建立连接。记得在不再需要连接池时调用`dataSource.close()`来释放资源。 总之,要解决`java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource`...
然而,"ClassNotFoundException"是一个常见的Java运行时异常,通常表示系统无法找到你尝试加载的类。在这个场景下,这个问题可能源于多个原因,主要涉及到项目的构建配置、依赖管理以及运行环境的差异。 首先,我们...
2. **版本不兼容**:可能使用的JDOM版本与程序所依赖的版本不匹配。确认项目引用的是正确的JDOM版本。 3. **打包错误**:如果项目被打包成JAR或WAR,确保所有依赖项(包括JDOM库)都被包含在内,并且在打包配置中...
"Android Caused by: java.lang.ClassNotFoundException解决办法" 在 Android 开发中,ClassNotFoundException 是一个常见的异常,它通常发生在应用程序启动或运行时。这个异常的出现告诉我们,Java 虚拟机无法找到...
使用IDEA启动项目遇见ClassNotFoundException的解决方案 在使用IDEA启动项目时,可能会遇见ClassNotFoundException的错误,导致项目无法启动。本文将详细介绍使用IDEA启动项目遇见ClassNotFoundException的正确解决...
在Java编程中,`ClassNotFoundException` 是一个常见的运行时异常,表示尝试加载某个类时,在类路径中找不到对应的`.class`文件。在这个特定的场景中,异常堆栈跟踪显示 `Caused by: java.lang....
在Java编程中,`ClassNotFoundException` 是一个常见的运行时异常,通常表示尝试加载某个类时,在类路径中找不到该类的定义。在这个特定的场景中,异常堆栈跟踪显示了 `Caused by: java.lang.ClassNotFoundException...
解决AopConfigException类不存在。...Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.springframework.aop.framework.AopConfigException 解决方法是把这个文件放到WEB-INF文件夹下面