NoClassDefFoundError 和ClassNotFoundException是我们在编程中常见的两个错误之2。
乍一看起来,这两个错误很像。为了区别开他们,特意思考一下把想法记录下来。
1.首先,NoClassDefFoundError是一个错误,ClassNotFoundException是一个异常。
注:Error一般可以理解为指系统异常或者jvm异常;Exception是指逻辑上可以避免的异常或者是指逻辑上不能避免但是jvm可以检测到的异常。Exception有RuntimeException(运行时异常)和Checked Exception(相对于Unchecked Exception而言)。
2.NoClassDefFoundError既然是一个错误,是指jvm加载类时候,某一个类没有找到导致的错误。一般是ClassLoader尝试加载类(例如引用或者new对象时),找不到这个类的定义,此时会暴露这个错误。当部署项目时候,jar包或者定义的类丢失会导致这样的问题出现。
3.ClassNotFoundException是一个异常。应该是编译不会发现问题,但是在项目运行时候或者调用方法应用时候,发生了异常。
比如 Class c = Class.forName("com.demo.Test").此时编译可过,但是真正运行该代码时候,如果com.demo.Test没有找到就会跑出ClassNotFoundException。上述将类名作为参数时候会出现这样的异常,所以要避免类名写错。