classNotFoundException与noclassdeffoundError
程序员文章站
2022-05-28 14:17:33
...
- 如名字所言,一个exception, 一个error, 而error是不建议捕捉的;
- classNotFound主要发生在Class.forName, ClassLoader.loadClass, Classloader.findSystemClass时动态加载类到内存中时,如果没有找到该类就会抛;还有一个原因是该类已经加载到内存中去了,此时另一个类加载器又尝试动态从同一个包中加载这个类;
- noClassDefFoundError主要由jvm抛出,大部分发生在new的时候却没有找到该类的定义。这个类在编译的时候有存在的,运行时却找不到。
- classNotFoundException发生在装入阶段;noClassDefFoundError发在生编译后使用阶段;
加载时从外存储器找不到需要的class就出现ClassNotFoundException
连接时从内存找不到需要的class就出现NoClassDefFoundError - classNotFoundException解决方法就是确定该类连同它依赖的包在类路径中;
- noClassDefoundError解决方法:确定依赖的包在运行时在正确的classPath中,通过System.getproperty("java.classpath")方法拿到实际存在的运行期classPath,如果不正确,可以通过-classpath命令明确指出正确的classPath。
推荐阅读