Java:Exception/Error

Exception和Error都是继承自Throwable类,java中只有Throwable类型实例才可能被抛出throw和捕获catch,它是异常处理机制的基础实现

Exception

是程序正常运行,可以预料的意外情况,可能并且应该不会,进行相应的处理

可检查异常

在源代码里必须显示的进行捕获处理

不可检查异常

运行时异常,类似NullPointException

Error

在正常情况下不大可能出现的情况,绝大部分error都会导致程序比如JVM自身处于非正常,不可恢复状态,既然非正常情况,所以不便于也不需要捕获,比如常见的OutOfMemoryError


Java:Exception/Error_第1张图片
异常继承关系

NoClassDefFoundError和ClassNotFoundException有什么区别?

Class.forName加载类的时候找不到类的时候会抛出ClassNotFoundException

如果jvm或者ClassLoader实例尝试加载(可以通过正常方法调用,也可能是使用new来创建新的对象)类的时候却找不到类的定义,要查找的类在编译时时存在的,运行的时候却找不到了,这个时候就会抛NoClassDefFoundError,造成这个的问题的原因是可能打包过程漏掉了部分类,或者jar包出现损坏或者篡改,解决办法就是查找那些在开发期间存在于类路径下但在运行期间却不在类路径下的类


需要注意的

1,不要捕获类似Exception这样的通用异常,而是捕获特定异常

2,不要生吞异常

3,try{} catch(){}会产生额外的性能开销,会影响JVM对代码的优化,仅捕获有必要的代码段

你可能感兴趣的:(Java:Exception/Error)