classNotFoundException与noclassdeffoundError

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

你可能感兴趣的:(classNotFoundException与noclassdeffoundError)