8、NoClassDefFoundError 和 ClassNotFoundException 有什么区别?

classnotfoundexception

当程序运行的过程中尝试使用类加载器去加载class文件的时候,如果没有在classpath中查找到指定的类,就会抛出classnotfoundexception。一般情况下,当我们使用 class.forname或者classloader.loadclass以及使用 classloader.findsystemclass在运行时加载类的时候,如果类没有找到,那么就会导致jvm抛出 classnotfountexception。

noclassdeffounderror

当jvm在加载一个类的时候,如果这个类在编译时可以用,但是在运行时找不到这个类的定义的时候,jvm就会抛出一个noclassdeffounderror错误, 比如当我们new一个类的实例的时候,如果在运行时类找不到,则会抛出一个noclassdeffounderror错误。

差异对比

继承exception   vs  继承error

当动态加载class的时候找不到类  vs 当编译成功以后执行过程中class找不到

一般在执行class.forname, classloader.loadclass  vs  由jvm的运行时系统抛出

 

 

你可能感兴趣的:(Java面试题)