jvm

JVM 系列 ClassNotFoundException与NoClassDefException

开启JVM探索新篇章

Posted by lichao modified on November 7, 2019

ClassNotFoundException 和 NoClassDefFoundError 都发生在 JVM 在 classpath 下找不到所需的类时。

ClassNotFoundException

存储概览

ClassNotFoundException 是一个运行时异常。从类继承层次上来看,ClassNotFoundException 是从Exception继承的,所以 ClassNotFoundException 是一个检查异常。

当应用尝试在类路径中用全限量名去加载某个类时,如果找不到它的定义就会报CLassNotFoundException 。它是一个可检测异常。

通常出现在用Class.forName(), ClassLoader.loadClass()或 ClassLoader.findSystemClass()这三个方法加载类的时候。在使用反射的时候,要特别注意这个异常。

NoClassDefFoundError

存储概览 NoClassDefFoundError是一种错误。NoClassDefFoundError 是程序在编译时可以找到所需依赖的类,但是在运行时依赖类找不到或者可以找到多个,就会抛出这个Error。

当 JVM 尝试通过 new 关键字创建一个类实例或者方法调用来加载一个类时找不到这个类的定义就会出现这个错误。通常是编译时正常编译,但是运行时找不到这个类。通常发生在执行动态代码块或者初始化静态字段时报了异常,从而导致类初始化失败而引发NoClassDefFoundError。