编程语言
首页 > 编程语言> > Java异常体系概述(转载)

Java异常体系概述(转载)

作者:互联网

原文地址

https://www.cnblogs.com/feifuzeng/p/14230756.html

 

Java的异常体系结构

Java异常体系的根类是 Throwable, 所以当写在java代码中写throw抛出异常时,后面跟的对象必然是Throwable或其子类的对象。
其中Exception异常是指一些可以恢复的异常, 例如常见的NullPointerException空指针异常。
Error指的是一些致命的错误,无法通过程序代码手段恢复的异常,例如OutOfMemoryError内存溢出错误。

unchecked异常

在上图中除了RuntimeException、Error及其子类都是属于unchecked的异常类型外,其他的都是受编译器checked检查的异常。
unchecked不受编译器检查的异常, 是因为这些错误在程序运行过程中是可以通过编程手段去控制住的,
例如常见的NullPointerException空指针异常和IndexOutOfBoundsException数组下标越界的异常,这些都可以事先使用if (xx != null) 以及 if (xxx.size() > i)来控制,
或者就是完全无法通过程序手段控制,
例如OutOfMemoryError内存溢出异常和StackOverflowError栈溢出异常,这种Error因为无法通过代码层面if就能避免的,所以也属于unchecked。

checked异常

checked在编译过程中受到编译器的检查,如果程序没有对该异常做catch处理或者向上一层抛出的话,程序将无法编译通过,
常见的checked异常有FileNotFoundException文件不存在异常等,因为这种异常在编写阶段就可以预见,例如这个文件极有可能是不存在的,所以这种异常必须要抛出并要求程序作出处理。

总结

Throwable任何异常/错误的祖先类,属于checked异常。
Exception异常,可以从异常中恢复执行的异常,属于checked异常。
RuntimeException异常,预料之外的异常例如空指针、数组越界,属于unchecked异常。
...Exception除了RuntimeException及其子类是unchecked异常,其他的Exception类都是checked异常。
Error错误,致命问题,无法从错误中恢复, 也属于unchecked异常。
在开发过程中,如果一些可以预料的到的错误抛出异常时,尽量抛出checked异常,例如那个文件、某个数据一定可能会不存在的情况下,就要提示该方法的调用者,需要对这种情况进行处理,
如果是一些预料之外的异常,则可以使用RuntimeException,例如某个值规定一定是必须不为空,但是程序判断时为空了,则要进行RuntimeException的抛出。

面试题

什么是checked/unchecked/runtime exception?

try/catch/finally的执行顺序

在finally中return数据会怎么样

由于finally在不管什么情况下都会执行,所以finally中的return或覆盖掉其他地方的return,最终以finally返回的为主,图中最终返回结果是2。

throw和throws的区别

final、finally、finalize的区别

结语

欢迎关注微信公众号『码仔zonE』,专注于分享Java、云计算相关内容,包括SpringBoot、SpringCloud、微服务、Docker、Kubernetes、Python等领域相关技术干货,期待与您相遇!

标签:Exception,Java,finally,概述,Error,checked,转载,异常,unchecked
来源: https://www.cnblogs.com/zhboke/p/14233733.html