java异常处理机制(二)之异常捕获和处理

发布时间 2023-11-13 16:58:49作者: 小亮又飘了

try...catch

语法:

try {

可能发生异常的代码

} catch(可能出现异常的类型 标识符) {

这种异常出现之后的处理方式

}

没有异常,直接打印try中内容,再打印后续内容 (catch中不执行,不需要捕获)在往下执行正常代码

 


## 2.try...catch...catch

语法:

try {
可能出现异常的代码
} catch (异常类型1 异常对象名1) {
异常类型1出现之后的处理办法
} catch (异常类型2 异常对象名2) {
异常类型2出现之后的处理办法
} ....
} catch (异常类型n 异常对象名n) {
异常类型n出现之后的处理办法
}

执行流程:
1、执行try中的内容,如果没有异常,try...catch语句直接结束

2、如果有异常,那么就在发生异常的代码位置直接跳转到catch块中,try中后面的代码就不再继续运行了

3、继续匹配各个catch块中的异常类型,从上到下,一旦匹配到某个catch声明的异常类型,就直接执行该catch块的处理方式。处理完成之后,try...catch语句就直接结束了,不会再去匹配后面其他的catch块的异常类型

 

 

 


注意事项:
1、如果在各个catch块中,出现了子父类的异常类型,那么子类异常的catch块,必须在父类异常catch块的上面,因为从上到下匹配方式,如果父类的catch块在上面,下面的catch块就没有出现的意义了,下面的catch块无法被运行到了。

2、在jdk1.7之后,可以对异常类型进行逻辑的或运算,使用|表示,多种异常类型,可以使用相同的处理方式:

catch(异常类型1 | 异常类型2 异常对象名称) {
异常类型1和2的共同处理方式
}

 

## 3.try..catch...finally

语法:

try {
可能发生异常的代码
} catch (可能发生的异常类型 异常对象名称) {
当前异常类型的处理方式
} finally {
一定要执行的
}

 

finally:一定要执行的代码

finally:也是一个代码块,在这个代码块中的代码,一定会执行,无论上面描述的哪种情况,都会执行。甚至在代码中有return语句,都会先执行finally中的代码。

 

 


注意事项:
如果代码中先执行了System.exit(0); 强制关闭了系统,finally就不会再执行。

4.try...finally

语法:

try {
可能发生异常的代码
} finally {
一定要执行的代码
}

作用:

1、无论try中的语句是否发生异常,finally中的代码都一定有执行的机会

2、如果有两句代码,都需要有执行的机会,不希望第一句的成功与否影响到第二句的执行机会,那么就把这两句代码分别放在try和finally中