一、异常分类
![](https://img.haomeiwen.com/i4739169/1c6191399989adf1.png)
-
Error:Error类以及他的子类的实例,代表了JVM本身的错误
-
运行时异常:除Error和运行时异常。
-
检查期间异常:表现为实现了RuntimeException的异常。
异常和错误的区别:异常能被程序本身可以处理,错误是无法处理
二、检查期异常和运行时异常的疑问
-
检查期异常的定义?
检查期异常要求编译前必须进行处理 -
检查期异常应该如何处理
捕获或者抛出,一直可以抛到虚拟机进行处理 -
运行时异常的定义?
编译器要求你必须处置的异常 -
运行时异常应该如何处理?
1、捕获
2、继续抛出
3、不处理
一般我们是不处理的,因为很难判断会出什么问题,而且有些异常也无法运行时处理,比如空指针,需要人手动的去查找。
- 既然有了RuntimeException来处理错误,那么为什么Java中还存在检查型异常?
1.存在检查型异常是一个设计上的决定,因为在你请求了不存在的系统资源的时候,一段强壮的程序必须能够优雅的处理这种情况。通过把IOException声明为检查型异常,Java 确保了你能够优雅的对异常进行处理。
2.可以使用catch或finally来确保数量受限的系统资源(比如文件描述符)在你使用后尽早 得到释放。
理解这样理解两种异常,运行时异常由虚拟机帮捕获并处理了这些异常情况,避免程序终止。而检查期异常时在编译器可以确定的一定要自行处理的异常,虚拟机没有帮我们进行处理。
三、关于finaly的疑问?
- finally代码块一定会被执行吗?
在以下4种特殊情况下,finally块不会被执行:
1.在finally语句块中发生了异常。
2.在前面的代码中用了System.exit()退出程序。
3.程序所在的线程死亡。
4.关闭CPU。
网友评论