java 多层catch_[Java基础] 0x03 try/catch捕获异常及多重捕获块

try/catch捕获异常及多重捕获块

导语try/catch多重捕获块finally关键字结束语

导语

昨天做了一道题,关于try/catch语句,题目是这样的:

try{

method(A);

}catch (IOException e1){

system.out.println("caught IOException!");

}catch (Exception e2){

system.out.println("caught Exception!");

}

如果method(A)抛出了一个IOException,那么控制台上会输出什么。

通过这道题我发现自己对try/catch异常捕获的语法不够了解,于是写这篇文章做一个记录。

try/catch

try/catch是我们最熟悉的,格式如下。

try{

//保护代码

}catch (异常类型 异常变量名){

//异常处理

}

语法很简单,即如果try{}中的保护代码抛出了异常,和catch所要捕捉的异常一致,则执行catch{}中的异常处理代码。

多重捕获块

多重捕获块是在try后有多个catch:

try{

//保护代码

}catch (异常类型1 异常变量名1){

//异常处理

}catch (异常类型2 异常变量名2){

//异常处理

}catch (异常类型3 异常变量名3){

//异常处理

}

可以在 try 语句后面添加任意数量的 catch 块。 如果保护代码中发生异常,异常被抛给第一个 catch 块。 如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。 如果不匹配,它会被传递给第二个 catch 块。 如此,直到异常被捕获或者通过所有的 catch 块。

所以说异常一旦被捕获,就不再执行接下来的catch代码。

我们这道题得出的结果应该也是

caught IOException!

finally关键字

finally语句在try/catch的后面:

try{

//保护代码

}catch (异常类型1 异常变量名1){

//异常处理

}catch (异常类型2 异常变量名2){

//异常处理

}finally{

//清理类型等收尾善后性质的语句

//无论是否发生异常,try/catch里是否有return,都会执行finally中语句

}

结束语

我们主要是了解了多重捕获块,那么考虑,如果安排多重捕获块的异常捕获顺序呢? 根据多重捕获块的语法特性,我们选择将子类异常放到前面,而父类异常放到后面。 例如:

try{

//保护代码

}catch (FileNotFoundException e1){

//异常处理

}catch (IOException e2){

//异常处理

}catch (Exception e3){

//异常处理

}

这是因为子类的异常信息比父类更详细,要先捕获小范围的异常再捕获大范围的异常。如果将父类放到前面,后面的catch语句就没用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值