-
Java异常架构图
Exception和Error区别
区别
Exception:是程序正常运行中,可以预料的意外情况,可以能并且应该捕获,进行相应处理
Error:在正常情况下,不太可能出现的情况,既然是非正常情况,所以不便于也不需要捕获,如:OutOfMemoryError
不要捕获通用异常,要捕获特定异常:
try{
//todo
Thread.sleep(1000L)
}catch(Exception e){
//todo
}
改为
try{
//todo
Thread.sleep(1000L)
}catch(InterruptedExcetion e){
//todo
}
NoClassDefFoundError和ClassNotFoundException有什么区别:
异常类型 | ClassNotFoundException | NoClassDefFoundError |
---|---|---|
继承模型 | 从java.lang.Exception继承,是一个Exception类型 | 从java.lang.Error继承,是一个Error类型 |
触发原因 | 当动态加载Class的时候找不到类会抛出该异常 | 程序在编译时可以找到所依赖的类,但是在运行时找不到指定的类文件,运行过程中Class找不到导致抛出该错误 |
触发主体 | 一般在执行Class.forName()、ClassLoader.loadClass()或ClassLoader.findSystemClass()的时候抛出 | JVM或者ClassLoader实例尝试加载类的时候,找不到类的定义而发生,通常在import和new一个类的时候触发 |
处理方式 | 程序可以从Exception中恢复,ClassNotFoundException可由程序捕获和处理 | 程序无法从错误中恢复,Error是系统错误,用户无法处理 |
可能原因 | 要加载的类不存在;类名书写错误 | jar包缺失;调用初始化失败的类 |