NoClassDefFoundError异常

NoClassDefFoundError和ClassNotFoundException

在java开发的过程经常会遇到这两个异常并且时常会产生混淆,为了便于区别,特作如下总结:

  • 相似点
    • NoClassDefFoundError和ClassNotFoundException异常出现原因都是加载不到类导致,但是两者确有本质的区别。
  • 不同点
    • ClassNotfoundException是在编译过程中JVM加载不到类或者找不到类引起;
    • NoClassDefError是在运行时JVM加载不到类或者找不到类引起;

NoClassDefFoundError错误发生原因

  • NoClassDefFoundError错误发生原因与Java虚拟机的工作原理相关,下面简单介绍一下JVM的类加载机制,其中类加载器的三个机制为委托、单一性、可见性。
    • 委托:指加载一个类的请求交给父类加载器,若父类加载器不可以找到或者加载到,再加载这个类;
    • 单一性:指子类加载器不会再次加载父类加载器已经加载过的类 ;
    • 可见性:子类加载器可以看见父类加载器加载的所有类,而父类加载器不可以看到子类加载器加载的类

JVM的委托机制决定了类加载器只加载一次,子类加载器不会再加载父类加载器已经加载过的类,因此在一些特定条件下就会出现编译时可以加载到类,运行时不可以加载到类,这时候就会出现java.lang.NoClassDefFoundError异常

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值