黑马程序员技术交流社区

标题: 类加载器异常 [打印本页]

作者: 文涛    时间: 2013-11-13 15:48
标题: 类加载器异常
ClassNotFoundException与NoClassDefFoundError这两个异常一个是loadClass()抛出,一个是defineClass()抛出,我想问,这两个异常表示的含义有什么不同,还有就是loadClass和defineClass在加载类的时候的分工是怎么样的
作者: 不抛弃不放弃    时间: 2013-11-13 15:56
正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢复程序.
ClassNotFoundException的产生原因:
Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都将导致该类被加载到JVM内存中,如果这个类在类路径中没有被找到,那么此时就会在运行时抛出ClassNotFoundException异常。

NoClassDefFoundError产生的原因:
如果JVM或者ClassLoader实例尝试加载(可以通过正常的方法调用,也可能是使用new来创建新的对象)类的时候却找不到类的定义。要查找的类在编译的时候是存在的,运行的时候却找不到了。这个错误往往是你使用new操作符来创建一个新的对象但却找不到该对象对应的类。这个时候就会导致NoClassDefFoundError.
由于NoClassDefFoundError是有JVM引起的,所以不应该尝试捕捉这个错误。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2