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

Exception总结

Java常见异常

Selenium + sikuli Error- * No ClassDefFoundError:org / sikuli / script / Screen * in命令提示符

ClassNotFoundException和NoClassDefFoundError

ClassNotFoundException和NoClassDefFoundError