NoClassDefFoundError,这个异常在第一次使用命令行执行Java类时很可能会碰到,如下面这种情况:
java -cp example.jar Example
在这个jar包里面只有一个类,这个类是net.test.Example,可能让你感到郁闷的是,明明在这个jar包里有这个类为什么会报如下错误呢?
这是因为你在命令行中没有加类的包名,正确的写法是这样的:
java -cp example.jar net.test.Example
这里同时报了NoClassDefFoundError和ClassNotFoundException异常,原因是Java虚拟机隐式加载example.jar后再显式加载Example时没有找到这个类,所以是ClassNotFoundException引发了NoClassDefFoundError异常。
在JVM的规范中描述了出现NoClassDefFoundException可能的情况就是使用new关键字、属性引用某个类、继承了某个接口或类,以及方法的某个参数中引用了某个类,这时会触发JVM隐式加载这些类时发现这些类不存在的异常。
解决这个错误的办法就是确保每个类引用的类都在当前的classpath下面。