NoClassDefFoundError与ClassNotFoundException之间的区别

首先我们来看一下文档中是如何定义的。

NoClassDefFoundError

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

如果jvm或者一个ClassLoader的实例尝试去载入一个class的定义内容(普通方法的调用或者用new去创建这个class的实例)但是没有找到这个class的信息。

ClassNotFoundException

Thrown when an application tries to load in a class through its string name using:
The forName method in class Class.
The findSystemClass method in class ClassLoader .
The loadClass method in class ClassLoader.
but no definition for the class with the specified name could be found.

As of release 1.4, this exception has been retrofitted to conform to the general purpose exception-chaining mechanism. The "optional exception that was raised while loading the class" that may be provided at construction time and accessed via the getException() method is now known as the cause, and may be accessed via the Throwable.getCause() method, as well as the aforementioned "legacy method."

当一个应用尝试通过Class.forName("class的名字")去载入这个class的时候,但是却没有找到。

我们只需要去关注比较重要的信息即可。需要注意到的是,NoClassDefFoundError是一个error并非一个异常,而是由LinkageError派生出的,但是ClassNotFoundException则是由ReflectiveOperationException派生的。

通过上面的jdk的文档说明可以很清楚的看出来:

NoClassDefFoundError出现的时机是当你真正使用这个类的信息的时候,当class-path上没有这个类的时候会出现。

ClassNotFoundException出现的时机就是一些反射操作,通过名称在Runtime去动态加载这个类的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值