首先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区别验证的更多相关文章

  1. 【Java】理解ClassNotFoundException与NoClassDefFoundError的区别

    一.概念上的认识 1)Exception与Error的区别 1.Exception的出现不会导致程序结束,用户程序可以捕获该异常 2.Error的出现会导致程序结束,用户程序无法捕获Error错误 2 ...

  2. 【java虚拟机系列】JVM类加载器与ClassNotFoundException和NoClassDefFoundError

    在我们日常的项目开发中,会经常碰到ClassNotFoundException和NoClassDefFoundError这两种异常,对于经验足够的工程师而言,可能很轻松的就可以解决,但是却不一定明白为 ...

  3. ClassNotFoundException和NoClassDefFoundError的区别

    ClassNotFoundException ClassNotFoundException的产生原因:就是找不到指定的class. ClassNotFoundException发生在加载阶段. 常见的 ...

  4. ClassNotFoundException和 NoClassDefFoundError的区别

    ##### 1. 类型 ClassNotFoundException继承自Exception,属于java异常类.NoClassDefFoundError继承自Error,在java中Error一般属 ...

  5. ClassNotFoundException与NoClassDefFoundError异常

    方法 loadClass()抛出的是 java.lang.ClassNotFoundException异常(一般是jar冲突或者没有引入jar):方法 defineClass()抛出的是 java.l ...

  6. ClassNotFoundException和NoClassDefFoundError的解决办法

    程序在其他手机都没有问题,但在刷到版本稍微较低的平板或手机上时就会直接闪退,并报出以下异常: java.lang.RuntimeException: Unable to instantiate act ...

  7. ClassNotFoundException和NoClassDefFoundError的差别

    正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有差别的,我们能够从异常中恢 ...

  8. Android 升级ADT到22第三方Jar包导致的ClassNotFoundException和NoClassDefFoundError异常解决

    在使用异步载入框架Android-Universal-Image-Loader的Jar包的时候遇到错误: java.lang.NoClassDefFoundError:com.nostra13.uni ...

  9. 【转】NoClassDefFoundError和ClassNotFoundException

    调试Hadoop源码时,一运行就报这个错误,后来发现是maven配置时,scope配置的问题, MAVEN Scope使用  相关链接:http://acooly.iteye.com/blog/178 ...

随机推荐

  1. 网络知识===cookie 、session、JSESSIONID的区别

    cookie .session ? 让我们用几个例子来描述一下cookie和session机制之间的区别与联系.笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微 ...

  2. 4.flume实战(一)

    需求:从指定网络端口采集数据输出到控制台 使用flume的关键就是写配置文件 a)配置source b)配置channel c)配置sink d)把以上三个组件串起来 我们看一下官网给的配置文件 # ...

  3. 原创 gif png bmp jeg 显示方法

    /// <summary> /// 注意不要忘记引用那几个图片单元哦,除了bmp格式不需要引用任何单元, /// 其它图片格式都需要引用对应的图片单元 /// png ---> Vc ...

  4. window下golang包管理glide使用说明

    golang是一门简洁高效的开发 语言,但是包管理一直是一个痛点,如图 : 很多开源项目特别是github.com中的大量应用golang.org和google.golang.org中的源码,且由于被 ...

  5. js一段小代码(浏览器用alert,否则用console)

    (function(){ var root=this, isBrowserSide=false; if(typeof window !=="undefined" && ...

  6. python的内存管理机制(zz)

    本文转载自:http://www.cnblogs.com/CBDoctor/p/3781078.html 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计 ...

  7. Centos7Yum安装PHP7.2

    1.安装源 安装php72w,是需要配置额外的yum源地址的,否则会报错不能找到相关软件包. php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic ...

  8. mysql table status

    SHOW TABLE STATUS 能获得表的信息 可以SHOW TABLE STATUS where name='表名'

  9. Dart类

    Dart中没有访问控制符,无论类还是方法默认都是public 1.构造函数 构造函数可以没有方法体,并且this可以直接在传参时直接对实例赋值 Bicycle(this.cadence, this.s ...

  10. 数字 function

    SELECT TRUNC(15.79), TRUNC(), ROUND(15.79), ), ), FLOOR(26.983), CEIL(26.123), ), ), ), MOD(,) FROM ...