文档章节

ClassNotFoundException,NoClassDefFoundError区别

sdl_xx
 sdl_xx
发布于 2016/07/12 16:02
字数 389
阅读 9
收藏 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的错误

© 著作权归作者所有

共有 人打赏支持
sdl_xx
粉丝 0
博文 3
码字总数 1183
作品 0
杭州
高级程序员
ClassNotFoundException和NoClassDefFoundError

定义: 对于术语的定义,最原汁原味的还是官方文档。 关于ClassNotFoundException,JavaDoc里这么描述: Thrown when an application tries to load in a class through its string name us...

摆渡者
2016/07/20
90
0
NoClassDefFoundError和ClassNotFoundException区别

很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。 NoClassDefFoundError错误发生的原因 NoClassDefFoundError错误...

_上善_若水_
04/17
0
0
ClassNotFoundException和NoClassDefFoundError的区别

正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢...

一条大河波浪宽
2013/10/05
0
0
NoClassDefFoundError问题

问题: 遇到一个问题,报NoClassDefFoundError,如下图: NoClassDefFoundError和ClassNotFoundException区别 我们经常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundErro......

yysue
05/31
0
0
【eclipse】 怎么解决java.lang.NoClassDefFoundError错误

前言 在日常Java开 发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类 明明还在,为什么找不到?而且我们很容易把jav...

无信不立
2017/02/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Cointext在阿根廷和土耳其推出比特币现金短信钱包

Cointext于10月15日开始在土耳其和阿根廷提供新的基于SMS的比特币现金钱包服务,这两个国家的加密货币使用量急剧上升,以应对严峻的经济形势。 移动钱包 通过短信处理BCH交易 “比特币是更好...

lpy411
6分钟前
0
0
大数据早课-0918

9.18日早课 1.全局搜索含有abc的文件名称或文件夹的命令 2.当前目录一般用什么表示 3.切换到上一次和上一层命令分别是什么 4.pwd是查看当前目录的什么 5.隐藏文件或文件夹的标识是什么? 怎样...

hnairdb
6分钟前
0
0
mybatis学习笔记一

一、mybaits需要的项目依赖 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artif......

wuyiyi
7分钟前
0
0
CentOS6 安装 GraphicsMagick

1.安装相关依赖: yum install -y gcc libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-devel freetype freetype-devel 2.下载并解压到目录/usr/local/ wget ft......

凯文加内特
9分钟前
0
0
RabbitMq集群使用Nginx做负载均衡

1.配置rabbitmq集群(可以参考前一篇RabbitMq之部署集群) 2.Nginx做负载均衡 注意:Nginx1.90版本后 新增了stream 模块用于一般的 TCP 代理和负载均衡,之前版本不支持 修改Nginx配置文件ngi...

zhaochaochao
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部