NoClassDefError和ClassNotFoundExcetion的区别

134 阅读1分钟

NoClassDefError和ClassNotFoundExcetion两者顾名思义就是对于类不存在这一问题抽象的。但是两者看着都是为处理一类问题,其实大有不同。

  • NoClassDefError 关注与程序在运行时照找不到类,即class文件丢失,程序中又需要引用该class文件(new等),因此抛出该类型错误 大家可以按照如下流程尝试抛出该类型错误,加深理解
编写两个.java文件,分别为Main.java 和 Test.javaMain.javamain方法new一个Test()类的实例,
在Test.java中编写最基本的类public class Test{}
javac编译后Main.java会得到Main.class 和 Test.class
使用java Main运行程序会抛出NoClassDefError。

  • ClassNotFoundExcetion 关注与在类加载时类不存在,如在程序中使用类加载器动态的加载一个类ClassLoader.loadClass(...) 若无法找到该类,则会抛出ClassNotFoundExcetion

总结 ClassNotFindExcetion和NoClassDefError都是java中对类找不到这一类问题的一个抽象,两者的不同主要体现在场合方面。