ClassNotFoundException和 NoClassDefFoundError区别验证
首先NoClassDefFoundError是一个错误,而ClassNotFoundException是一个异常
NoClassDefFoundError产生的原因:
如果JVM或者Classloader实例尝试加载类(或者new创建对象)却找不到类的定义,要查找的类在编译时期是存在,运行期间却找不到该对象对应的类,这个时候就会导致NoClassDeFoundError错误。
NoClassDeFountError三种解决方法:
1、首先是类在运行的时候依赖于其它的一个jar包,但是该jar包没有加载到classpath中或者是该jar包的名字被其他人改了,就像我的一个例子tibo.jar改为了tibco_v3.jar
2、运行的类不在classpath中,这个问题没有一个确定的方法去知道,但是很多时候你可以通过System.getproperty(”java.classpath“)方法,该方法能让你至少可以领略到实际存在的运行期间的classpath。
ClassNotFoundException产生原因:
Java支持使用Class.forName方法来动态加载类,任意一个类的类名可以通过参数传递将该类加载到JVM内存中,如果该类的路径没有被找到,这个时候就会抛出ClassNotFoundException。
ClassNotFoundException的解决方法:
确保所需的类连同它的依赖包存在于类路径中。
总结:NoClassDefFoundError是程序在编译时期可以顺利找到所依赖的类,但是在运行时找不到或者找到多个类就会抛出该Error。ClassNotFoundException是类路径错误,或者类名称发生更改。
在生产环境出现的原因通常是由于依赖jar包多版本存在,或者jar包升级类或者方法不再提供。
package jesse.test; import java.util.Scanner; public class TestClassAboutException { public static void main(String[] args) {
System.out.println("---》》》TestClassAboutException编译已经通过啦!!!");
toShowClassNotFoundException();
toShowNoClassDefErr(); } public static void toShowClassNotFoundException(){
try {
//"jesse.test.TestClassAboutException"
// 模拟jar包路劲改变或者,类名称改变引起的ClassNotFoundException
Class cl = Class.forName("test.TestClassAboutException");// TestClassAboutException.class.getName()
System.out.println("---》》》toShowClassNotFoundException ::: "+cl.getName());
} catch (ClassNotFoundException e) {
System.out.println("---》》》ClassNotFoundException 被捕捉到啦!!!");
e.printStackTrace();
}
} public static void toShowNoClassDefErr(){
try {
B bS = new B();
} catch (Throwable e) {
e.printStackTrace();
}
B b = new B();
}
}
package jesse.test; public class B { static{
init();
} public B(){} public static void init(){
System.out.println("B init and then Exception occurred");
int res = 5/0;
System.out.println(res);
}
}
由于编译成功之后有B.class文件,但是在运行时无法找到B类,所以会报NoClassDefFoundError.
ClassNotFoundException和 NoClassDefFoundError区别验证的更多相关文章
- 【Java】理解ClassNotFoundException与NoClassDefFoundError的区别
一.概念上的认识 1)Exception与Error的区别 1.Exception的出现不会导致程序结束,用户程序可以捕获该异常 2.Error的出现会导致程序结束,用户程序无法捕获Error错误 2 ...
- 【java虚拟机系列】JVM类加载器与ClassNotFoundException和NoClassDefFoundError
在我们日常的项目开发中,会经常碰到ClassNotFoundException和NoClassDefFoundError这两种异常,对于经验足够的工程师而言,可能很轻松的就可以解决,但是却不一定明白为 ...
- ClassNotFoundException和NoClassDefFoundError的区别
ClassNotFoundException ClassNotFoundException的产生原因:就是找不到指定的class. ClassNotFoundException发生在加载阶段. 常见的 ...
- ClassNotFoundException和 NoClassDefFoundError的区别
##### 1. 类型 ClassNotFoundException继承自Exception,属于java异常类.NoClassDefFoundError继承自Error,在java中Error一般属 ...
- ClassNotFoundException与NoClassDefFoundError异常
方法 loadClass()抛出的是 java.lang.ClassNotFoundException异常(一般是jar冲突或者没有引入jar):方法 defineClass()抛出的是 java.l ...
- ClassNotFoundException和NoClassDefFoundError的解决办法
程序在其他手机都没有问题,但在刷到版本稍微较低的平板或手机上时就会直接闪退,并报出以下异常: java.lang.RuntimeException: Unable to instantiate act ...
- ClassNotFoundException和NoClassDefFoundError的差别
正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有差别的,我们能够从异常中恢 ...
- Android 升级ADT到22第三方Jar包导致的ClassNotFoundException和NoClassDefFoundError异常解决
在使用异步载入框架Android-Universal-Image-Loader的Jar包的时候遇到错误: java.lang.NoClassDefFoundError:com.nostra13.uni ...
- 【转】NoClassDefFoundError和ClassNotFoundException
调试Hadoop源码时,一运行就报这个错误,后来发现是maven配置时,scope配置的问题, MAVEN Scope使用 相关链接:http://acooly.iteye.com/blog/178 ...
随机推荐
- IC卡的传输协议(2)-块传输协议T=1【转】
转自:http://bbs.ednchina.com/BLOG_ARTICLE_172024.HTM 2.4 块传输协议T=1 T=1协议中,在TAL和IC卡之间传送的命令.R-APDU和传输控制信息 ...
- 7.Redis键值对数据库
1.Redis的安装以及客户端连接 安装:apt-get install redis-server 卸载:apt-get purge --auto-remove redis-server 启动:red ...
- python数据类型-----列表
今天来总结下python3.4版本列表的一些操作方法. 列表(list): 1.列表就像一个线性容器,但是比C++的 lis t扩展多得多,列表里的元素可以是相同类型,也可以包含各种类型,比如列表里嵌 ...
- hdu 3304(直线与线段相交)
Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12042 Accepted: 3808 Descrip ...
- 记录一次统计首页MYSQL非常慢的解决过程
select resource_size_int from t_resource_info where release_status in (1,3) and res_type in (1,2,4,5 ...
- Remove @Override annotation错误提示
因为对于JDK5.0/1.5版本来说,@Override annotation只能用与对超类的方法重写上, 而不能用在对接口方法的实现方法上. 解决的方法是把JDK改为1.6的或动手把注释@Overr ...
- 常用的WebService一览表
天气预报Web服务,数据来源于中国气象局Endpoint :http://www.webxml.com.cn/WebServices/WeatherWebService.asmxDisco ...
- std::string 字符串大小写转换(转)
该问题归结为std::transform函数的使用 函数原型 template < class InputIterator, class OutputIterator, class UnaryO ...
- Codeforces 651 C. Watchmen-曼哈顿距离和欧几里得距离
C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...
- Codeforces #426 Div2 D(线段树优化 DP )
#426 Div2 D 题意 给出 \(n\) 个数字,将这些数字隔成 \(k\) 个部分(相对位置不变),统计每个部分有几个不同数字,然后全部加起来求和,问和最大是多少. 分析 很容易想到 \(DP ...