NoClassDefFoundError与ClassNotFoundException的区别

NoClassDefFoundError

编译通过,但运行时,类加载器找不到对应的类。
NoClassDefFoundError与ClassNotFoundException的区别
对应代码:

package com.cgi.tools.java;
public class ClassA {
 private ClassB instanceB = null;
 private ClassC instanceC = null;

 public ClassA() {
 instanceB = new ClassB();
 //运行时类加载器加载不到ClassC,抛出NoClassDefFoundError
 instanceC = new ClassC();
 }
}

ClassNotFoundException

通过全类名加载类,而类加载器找不到指定的类时,抛出ClassNotFoundException。

有3个方法可能抛出该异常:

  • Class.forName
  • ClassLoader.findSystemClass
  • ClassLoader.loadClass

示例:

package otaku.classload;

public class ClassNotFound {
	public static void main(String[] args) throws ClassNotFoundException {
		Class.forName("class.not.found.NotFound");
	}
}