NoClassDefError和ClassNotFoundExcetion两者顾名思义就是对于类不存在这一问题抽象的。但是两者看着都是为处理一类问题,其实大有不同。
- NoClassDefError 关注与程序在运行时照找不到类,即class文件丢失,程序中又需要引用该class文件(new等),因此抛出该类型错误 大家可以按照如下流程尝试抛出该类型错误,加深理解
编写两个.java文件,分别为Main.java 和 Test.java
在Main.java的main方法new一个Test()类的实例,
在Test.java中编写最基本的类public class Test{}
javac编译后Main.java会得到Main.class 和 Test.class
使用java Main运行程序会抛出NoClassDefError。
- ClassNotFoundExcetion 关注与在类加载时类不存在,如在程序中使用类加载器动态的加载一个类ClassLoader.loadClass(...) 若无法找到该类,则会抛出ClassNotFoundExcetion
总结 ClassNotFindExcetion和NoClassDefError都是java中对类找不到这一类问题的一个抽象,两者的不同主要体现在场合方面。