ClassNotFoundException和NoClassDefFoundError的区别
Posted xiaotong1223
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ClassNotFoundException和NoClassDefFoundError的区别相关的知识,希望对你有一定的参考价值。
jvm加载类过程:
加载:加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。注意这里不一定 非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理),也可以由其它文件生成 (比如将JSP文件转换成对应的Class类)。
验证:确保Class文件的字节流中包含的信息是否符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。
准备:准备阶段是正式为类变量分配内存(方法区)并设置类变量的初始值阶段,仅设初始值,若为final修饰则赋用户指定的值
解析:虚拟机将常量池中的符号引用替换为直接引用的过程
初始化:真正执行类中定义的Java程序代码
ClassNotFoundException:就是找不到指定的class。
调用class的forName方法时,找不到指定的类
ClassLoader 中的 findSystemClass() 方法时,找不到指定的类
ClassLoader 中的 loadClass() 方法时,找不到指定的类
NoClassDefFoundError:发生在初始化阶段
类依赖的class或者jar不存在
类文件存在,但是存在不同的域中
使用spring框架,用注入时若该类不存在则会报NoClassDefFoundError
以上是关于ClassNotFoundException和NoClassDefFoundError的区别的主要内容,如果未能解决你的问题,请参考以下文章
jodconverter java.lang.ClassNotFoundException
Selenium + sikuli Error- * No ClassDefFoundError:org / sikuli / script / Screen * in命令提示符