java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java NoClassDefFoundError原因

Java之NoClassDefFoundError的原因及分析

作者:smileNicky

在Java开发中,经常会遇到ClassNotFoundException和NoClassDefFoundError异常,ClassNotFoundException发生在编译时JVM无法找到类,而NoClassDefFoundError则发生在运行时JVM无法加载类,这两个异常虽然原因相似,但有本质区别

ClassNotfoundException

java开发中经常遇到java.lang.ClassNotfoundException异常,ClassNotfoundException异常一般就是编译时找不到类,Console台就会输出异常信息。

一般情况下,我们都会rebuild或者clean一下工程,让项目重新编译一遍。

两个异常的区别

不过一遇到NoClassDefFoundError,我们有时也容易和ClassNotfoundException异常混淆。

虽然NoClassDefFoundError和ClassNotfoundException异常出现原因类似,都是因为编译加载不到类导致的,但是却有本质的区别。

两者的本质区别就是:

NoClassDefFoundError错误发生原因

为什么会发生NoClassDefFoundError错误?

其实就是和Java虚拟机的工作原理有关了,下面简单介绍一下JVM的类加载机制

类加载器三个机制:委托、单一性、可见性

JVM的类加载机制的委托行机制,决定了类加载器只加载一次,子类加载器不会再加载父类加载器已经加载过的类

所有在一些特定条件下就会出现编译时可以加载到类,运行时不可以加载到类,这时候就会出现java.lang.NoClassDefFoundError异常

NoClassDefFoundError可能出现的情况

目前有发现几种情况:

1、一种情况就是因为静态变量加载不到原因

2、工程里没有将jar添加到classpath,maven项目的,需要根据项目情况排查

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文