ClassNotFoundException,NoClassDefFoundError区别
博客专区 > sdl_xx 的博客 > 博客详情
ClassNotFoundException,NoClassDefFoundError区别
sdl_xx 发表于2年前
ClassNotFoundException,NoClassDefFoundError区别
  • 发表于 2年前
  • 阅读 9
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

    要了解ClassNotFoundException,NoClassDefFoundError区别,首先应该了解 jvm中加载和链接两个步骤,

1.bootstrap加载器加载jvm原生class文件

2.类加载器(user-defined),

(1)系统加载器加载系统class文件到jvm中

(2)用户自定义加载器加载相应类文件,步骤如下

由于每个文件都有自己的加载器,而加载器会根据Java父类子类关系,根据父加载有限或者子加载优先的规则,将加载过程如下:

1.1 某一个class文件先由他的父类classloader加载,如果加载不到,会交由子类加载,如果都加载不到,会报ClassNotFoundException,该错误类在jdk api中描述如下:

The forName method in class Class.
The findSystemClass method in class ClassLoader .
The loadClass method in class ClassLoader.

1.2.由于A类中可能调用B类中的代码,这样A加载器会优先加载B类的class文件,这种加载方式成为加载器代理方式,

Java类链接:

1.链接是指将Java类文件合并到jvm正在运行的状态过程中,

2.链接过程包括:验证,准备,解析:

2.1 验证保证Java类的二进制结构完整,不完整的话会报java.lang.VerifyError错 误,

2.2准备是将Java静态域中的代码设置成默认值,但是不会运行任何代码

2.3解析确保类能够被找到,这个时候比如a类引用b类中的代码,这个时候如果找不到会报NoClassDefFoundError的错误

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 3
码字总数 1183
×
sdl_xx
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: