文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

docker中安装了RabbitMQ后无法访问其Web管理页面

在官网找了"$ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management"这条安装命令,在docker上安装了RabbitMQ,,结果输入http://localhost:8080并不......

钟然千落
23分钟前
0
0
spring-cloud | 分布式session共享

写在前面的话 各位小伙伴,你们有福了,这一节不仅教大家怎么实现分布式session的问题,还用kotlin开发,喜欢kotlin的小伙伴是不是很开心! 以前在写Android的时候,就对客户端请求有一定的认...

冯文议
43分钟前
0
0
c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
今天
4
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
2
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部