【Java进阶篇】 ClassNotFoundException和NoClassDefFoundError的区别是什么?
2024-01-01 10:27:51
ClassNotFoundException和NoClassDefFoundError的区别
??典型解析
ClassNotFoundException
是一个受检异常 (checked exception
) 。他通常在运行时,在类加载段尝试加载类的过程中,找不到类的定义时触发。通常是由Class.forName()
或类加载器loadClass
或者findSystemClass
时,在类路径中没有找到指定名称的类时,会抛出该异常。表示所需的类在类路径中不存在。这通常是由于类名拼写错误或缺少依赖导致的。
如以下方式加载JDBC驱动:
public class MainClass {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
当我们的classpath中没有对应的jar包时,就会抛出这个ClassNotFoundException。
NoClassDefFoundError
是一个错误 (error) ,它表示运行时尝试加载一个类的定义时,虽然找到了类文件,但在加载、解析或链接类的过程中发生了问题。这通常是由于依赖问题或类定义文件(.class文件)损坏导致的。也就是说这个类在编译时存在,运行时丢失了,就会导致这个异常。
class A {
//some code
}
public class B {
public static void main(String[] args) {
A a = new A();
}
}
在编译后会生成A.class和B.class,当我们删除A.class
之后,单独运行B.class
的时候,就会发生NoClassDefFoundError
。
??扩展知识仓
??NoSuchMethodError
NoSuchMethodError
表示方法找不到,他和NoClassDefFoundError
类似,都是编译期找得到运行期找不到了。
这种
error
发生在生产环境中是,通常来说大概率是发生了jar
包冲突。
文章来源:https://blog.csdn.net/Java_Yangxiaoyuan/article/details/135322450
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!