首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

理解ClassNotFoundException与NoClassDefFoundError的区别

上篇文章已经介绍过Java的类加载机制,类加载的过程中我们最常遇到的异常就是: ClassNotFoundException NoClassDefFoundError 但是你知道他们的区别吗?...classpath下全部没有找到,就会抛出上面的异常,最常见的例子就是加载JDBC驱动包的时候,它的依赖jar并不在classpath里面,如下: . package class_loader.exception...既然它存在,那么jvm里面一定能找到,如果不能找到,那就说明出大事了,因为编译和运行不一致,所以直接抛出这个ERROR,代表问题很严重。...这里需要注意,类初始化失败的异常是: java.lang.ExceptionInInitializerError 也是一个严重级别的错误。...这两种异常本质的侧重点还是不一样的,前者侧重在类加载器加载阶段找不到类信息,后者则侧重在使用阶段时却出现了问题比如实例化依赖类找不到或者类本身就初始化失败了。

8.7K30

java.lang.NoClassDefFoundError

我的配置文件中有扫描包的路径,但是后来我给包重命名了,但是把配置文件中的忘记改了,于是出了这个问题 建议大家遇到这个问题先反复排查自己的路径配置对不对 另外,这个发生可能的原因如下: 对应的Classjava...的classpath中不可用<<<<<<这是我遇到问题的原因 你可能用jar命令运行你的程序,但类并没有jar文件的manifest文件中的classpath属性中定义 可能程序的启动脚本覆盖了原来的...classpath环境变量 因为NoClassDefFoundError是java.lang.LinkageError的一个子类,所以可能由于程序依赖的原生的类库不可用而导致 检查日志文件中是否有java.lang.ExceptionInInitializerError...NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError...如果你查看程序日志,会发现一些java.lang.ExceptionInInitializerError的错误日志,ExceptionInInitializerError的错误会导致java.lang.NoClassDefFoundError

76420

解决java.lang.NoClassDefFoundError错误

而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实这两个错误是完全不同的。...而如果你J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。...NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError...这种错误也可能抛出java.lang.UnsatisfiedLinkError: no dll in java.library.path Exception Java这样的异常。...的异常,因为两个不同类加载器加载的类无法进行比较。

6310

NoClassDefFoundError 和 ClassNotFoundException 有什么区别

NoClassDefFoundError 当JVM加载一个类的时候,如果这个类在编译时是可用的,但是在运行时找不到这个类的定义的时候,JVM就会抛出一个NoClassDefFoundError错误。...比如当我们new一个类的实例的时候,如果在运行时类找不到,则会抛出一个NoClassDefFoundError的错误。...通常发生在执行动态代码块或者初始化静态字段时报了异常,从而导致类初始化失败而引发NoClassDefFoundError。...NoClassDefFoundError 从java.lang.Exception继承,是一个Exception类型 从java.lang.Error继承,是一个Error类型 当动态加载Class的时候找不到类会抛出异常...当编译成功以后执行过程中Class找不到导致抛出该错误 一般执行Class.forName()、ClassLoader.loadClass()或ClassLoader.findSystemClass

77720

JDK源码解析之 java.lang.Error

初始化一个类时,若检测到类之间循环依赖则抛出异常。 5、java.lang.ClassFormatError 类格式错误。...当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。 6、java.lang.ExceptionInInitializerError 初始化程序错误。...当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出异常。...当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出异常。一般修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。...当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出异常. 10、java.lang.InternalError 内部错误。用于指示Java虚拟机发生了内部错误。

52620

Android4.4运行过程中闪退java.lang.NoClassDefFoundError

上周五项目测试时发现一个奇怪的Bug,项目中依赖了一个第三方框架,但是android4.0-4.4.4之间的系统中运行会直接闪退,抛出错误异常为java.lang.NoClassDefFoundError...)而这个类定义并没有找时所抛出的错误。...或插件化编程时,动态加载或实例化类失败将会报错; 3.系统资源紧张时,当大量class需要加载到内存的时候,处于竞争关系,部分calss竞争失败,导致加载不成功; 4.装载并初始化一个类时失败(比如静态块抛 java.lang.ExceptionInInitializerError...异常),然后再次引用此类也会提示NoClassDefFoundErr 错误; 5.手机系统版本或硬件设备不匹配(如ble设备只支持18以上SDK),程序引用的class低版本中不存在,导致NoClassDefFoundErr...但是,实际的定位问题的过程中发现并不是总的方法数超出65535,也并不是class竞争失败,最后的问题出在解决方案5,引用的class低版本中不存在或者说实现可能不同了。

1.3K20

实习杂记(27):如何解决Java.lang.NoClassDefFoundError

而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实这两个错误是完全不同的。...而如果你J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。...NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError...这种错误也可能抛出java.lang.UnsatisfiedLinkError: no dll in java.library.path Exception Java这样的异常。...的异常,因为两个不同类加载器加载的类无法进行比较。

31K20

Java中变量的初始化顺序

Java中变量的初始化顺序 写一个通用的报警模块时,遇到一个有意思的问题,调用静态方法时,发现静态方法内部对静态变量引用时,居然抛出了npe,仿佛是因为这个静态变量的初始化静态方法被调用时,还没有触发...,如果在某个静态成员初始化的时候抛出异常,会怎样?...public方法时,每次都是抛异常 导致这个问题的原因,还有待考究,但是前面这个问题的答案,估摸着和下面差不多了(但是不敢确定,有待大神指点) 理论类初始化失败,应该就不允许被调用了 但是某些情况下,...初始化异常时 理论,类初始化中抛出异常,那么这个类将无法被classLoader正确的加载,因此也无法有效的使用这个类 但是不排除某些情况下,依然强行的使用了这个类(如上面gif图中的演示),这个原理还不太清晰...注意 因此,请格外注意,初始化代码中,请确保不会有抛出异常,如果无法把控,不妨新建一个init()方法来实现初始化各种状态,然后代码中主动调用好了 V.

1.1K10

JAVA非受检异常和受检异常的区别等

一 .两种异常结构 java中的异常和错误都继承自java.lang.Throwable img 异常处理的时候,都会接触到受检异常(checked exception)和非受检异常(unchecked...RuntimeException是那些可能在 Java 虚拟机正常运行期间抛出异常的超类。...可能在执行方法期间抛出但未被捕获的RuntimeException的任何子类都无需throws子句中进行声明。...classpath环境变量 因为NoClassDefFoundError是java.lang.LinkageError的一个子类,所以可能由于程序依赖的原生的类库不可用而导致 检查日志文件中是否有java.lang.ExceptionInInitializerError...NoClassDefFoundError 错误;当你代码中显示的加载类比如 Class.forName() 调用时却没有找到相应的类,就会抛出java.lang.ClassNotFoundException

2.1K20

常见加载类错误分析

执行 Java程序时经常会碰到ClassNotFoundException和NoClassDefFoundError两个异常,它们都和类加载有关,下面详细分一下这两个异常的原因。...解决这个错误的方法就是确保这个类引用的类都在当前的classpath下面 UnsatisfiedLinkError 这个异常倒不是很常见,但是出错的话,通常是JVM启动的时候,如果一不小心将在JVM的某个...而无法创建新实例,那么就抛出OutOfMemoryError对象作为代替。...如果初始化器抛出一些Excepton,而且Exception类不是Error或者它的某个子类,那么就会创建ExceptioinInInitializerError类的一个新实例,并用Exception作为参数...: java.lang.ExceptionInInitializerError 初始化这个类时,给静态属性map赋值时出现了异常导致抛出错误ExceptionInInitializerError

1.1K20

当dex分包遇上NoClassDefFoundError&ClassNotFoundException

简介 本文记录的是:国庆节前夕,解决Crash率高达9.08%问题成功避免加班拿3倍工资的故事 PS: 除了时间两者相遇外,本文中提到的两个(top1&top2)crash问题与dex分包并没有关系...幸好,RDM异常上报平台逐个查看logcat信息的过程中,我们第4页找到了一个关键的日志信息 log.txt 我们分别来看看对应关键地方的代码 com.example.nucleus.manager.spaceclean.SpaceScanManager.y...答:因为调用的地方异常被try/catch住了 // 幸亏此处还有tr.printStackTrace();,否者任何加载失败的蛛丝马迹都将不复存在 ---- 制造场景重现Crash 知道了Crash...发生的原理,很简单的就能制造场景重现Crash,代码如下: 结果: 第一处被catch住的java.lang.ExceptionInInitializerError异常 第二处没有catch的java.lang.NoClassDefFoundError...java.lang.ExceptionInInitializerError异常 若类加载java.lang.ExceptionInInitializerError异常被try/catch住,下次new类对象时将产生

58820

java中的异常总结

初始化一个类时,若检测到类之间循环依赖则抛出异常。 java.lang.ClassFormatError 类格式错误。...java.lang.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常抛出。...当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出异常。一般修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。...该错误及其所有子类指示某个类依赖于另外一些类,该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。...是所有Java虚拟机正常操作期间可以被抛出异常的父类。 java.lang.SecurityException 安全异常。由安全管理器抛出,用于指示违反安全情况的异常

1.4K30

常见的几种RuntimeException

初始化一个类时,若检測到类之间循环依赖则抛出异常。 java.lang.ClassFormatError 类格式错误。...java.lang.ExceptionInInitializerError 初始化程序错误。当运行一个类的静态初始化程序的过程中,发生了异常抛出。...当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出异常。一般改动了应用中的某些类的声明定义而没有对整个应用又一次编译而直接执行的情况下,easy引发该错误。...该错误及其全部子类指示某个类依赖于另外一些类,该类编译之后,被依赖的类改变了其类定义而没有又一次编译全部的类,进而引发错误的情况。...java.lang.NoSuchFieldException 属性不存在异常。当訪问某个类的不存在的属性时抛出异常

86210
领券