技术思考--请对比Exception和Error,另外,运行时异常与一般异常有什么区别?

问题思考

相同点:

JAVA中的Exception和Error都是继承throwable类,在JAVA中继承了throwable类的实例才可以被抛出和捕获,它是异常的基本组成类型。

不同点:

Exception异常指程序运行过程中,可以预料的意外情况,可能并且应该被捕获,可以进行相应处理;

Error异常指在在正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序(比如JVM自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如OutOfMemoryError之类,都是Error的子类。

Exception又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常指程序中需要进行显示捕获并处理,在文件编译时编译器也会进行检查。不检查异常指程序运行过程中的异常,我们经常遇到的 NullPointerException、ArrayIndexOutOfBoundsException之类,可以通过编码进行避免,或者捕获处理。

知识拓展


异常类图

NoClassDefFoundError和ClassNotFoundException区别,参考文章:https://my.oschina.net/jasonultimate/blog/166932

异常处理时注意两个基本原则:

第一,尽量不要捕获类似Exception这样的通用异常,而是应该捕获特定异常。

第二,不要生吞异常。会导致错误无法追踪

Java的异常处理机制从性能上的影响:

1.try-catch代码段会产生额外的性能开销,或者换个角度说,它往往会影响JVM对代码进行优化,所以建议仅捕获有必要的代码段,尽量不要一个大的try包住整段的代码;与此同时,利用异常控制代码流程,也不是一个好主意,远比我们通常意义上的条件语句(if/else、switch)要低效。

2.Java每实例化一个Exception,都会对当时的栈进行快照,这是一个相对比较重的操作。如果发生的非常频繁,这个开销就不能被忽略了。

你可能感兴趣的:(技术思考--请对比Exception和Error,另外,运行时异常与一般异常有什么区别?)