都是类找不到,ClassNotFoundException和NoClassDefFoundError有什么区别?

在开发部署时,启动出现了这个问题。有java.lang.NoClassDefFoundErrorjava.lang.ClassNotFoundException ,看名字都大概是类找不到,那他们它们有什么区别?在这里插入图片描述

ClassNotFoundException

ClassNotFoundException 从后缀可以看出是Exception 的子类。

javadoc说明:
当应用程序尝试使用其字符串名称通过其字符串名称加载类时抛出,但是找不到指定类名对应的类定义,包括
1、Class 的 forName 方法
2、ClassLoader 的 findSystemClass 方法
3、ClassLoader 的 loadClass 方法

比较常用的有 JDBC 或者开元框架如 Spring 中,利用类名获取类定义。

测试:
在这里插入图片描述
输出:
在这里插入图片描述

NoClassDefFoundError

NoClassDefFoundError 从后缀可以看出是Error 的子类。

javadoc 说明:
如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为常规方法调用的一部分或使用new创建新实例的一部分)而抛出,而且找不到该类的定义。
当前执行的类在编译时可以搜索到,但无法在找到这个类定义。

就是说一个类在编译时可以找到,但是运行时找不到了。

如 一个 maven 的依赖作用范围,包括编译期,但是不包括运行期。如provided
测试:
pom设置作用范围 provided,有效范围包括 compile, test
在这里插入图片描述

测试类:
在这里插入图片描述
输出:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值