第九章--Java异常和异常处理 第二节--Java异常处理
异常处理(1):
异常处理(的目的):
(1)允许用户及时保存结果
(2)抓住异常,分析异常内容
(3)控制程序返回到安全状态
异常处理(2):
---- try - catch - finally :一种保护代码正常运行的机制
---- 异常结构:
(1)try ... catch(可以有多个,下同)
(2)try ... catch ... finally
(3)try ... finally
注意:try必须有,catch和finally至少要有一个
异常处理(3):
---- try:正常业务逻辑代码
---- catch:当try发生异常时,将执行catch代码。若无异常,绕之
---- finally:当try或者catch执行结束后,必须要执行finally
查看例子TryDemo.java
异常处理(4):
----catch块可以有多个,每个有不同的入口形参。当已发生的异常和某一个catch块中的形参类型一致,那么将执行该catch块中的代码。如果没有一个匹配,catch也不会被触发。最后都进入finally块
----进入catch块后,并不会返回到try发生异常的位置,也不会执行后续的catch块,一个异常只能进入一个catch块
异常处理(5):
----catch块的异常匹配是从上往下进行匹配的
----所以一般是将小的异常写在前面,而一些大(宽泛)的异常则写在末尾(多个catch的情况,小异常写在前面,大异常写在后面,否则会报错)
异常处理(6):
----try结构中,如果有finally块,finally肯定会被执行
----try - catch - finally 每个模块里面也会发生异常,所以也可以在内部继续写一个完整的try结构
可以包含一个完整的try - catch - finally,但是不允许嵌套:
异常处理(7):
----方法存在可能异常的语句,但是不处理,那么可以使用throws来声明异常
----调用带有throws异常(checked exception)的方法,要么处理这些异常,或者再次向外throws,直到main函数位置
(也就是说,有的代码没有try-catch块,你调用我的程序,需要考虑是否处理这个异常,如果不处理,你的方法也要声明,然后向外抛出)
举个例子:
下面代码y可能是0,但是不处理,只抛出这个异常
另一个程序调用上面的方法,就有义务来承担这个异常的处理。比如使用try-catch处理这个异常。或者在定义方法时也抛出这个异常(包括在main函数里面)。
异常处理(8):(与继承相关的异常处理)
----一个方法被覆盖,覆盖它的方法必须抛出相同的异常,或者异常的子类
----如果父类的方法抛出多个异常,那么重写的子类方法必须抛出那些异常的子集,也就是不能抛出新的异常或者更多的异常