栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java中是否可以在同一catch块中捕获两个异常?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java中是否可以在同一catch块中捕获两个异常?

Java 7及更高版本

从Java
7开始,支持多异常捕获。

语法为:

try {     // stuff} catch (Exception1 | Exception2 ex) {     // Handle both exceptions}

的静态类型

ex
是列出的异常中最特殊的通用超类型。有一个很好的功能,如果您将其重新抛出
ex
,编译器就会知道只能抛出列出的异常之一。


Java 6及更早版本

在Java 7之前,有多种方法可以解决此问题,但是它们往往比较笨拙并且有局限性。

方法1

try {     // stuff} catch (Exception1 ex) {     handleException(ex);} catch (Exception2 ex) {     handleException(ex);}public void handleException(SuperException ex) {     // handle exception here}

如果异常处理程序需要访问在之前声明的局部变量,则这会变得很混乱

try
。而且,如果处理程序方法需要重新引发异常(并进行了检查),则签名会遇到严重问题。具体来说,
handleException
必须声明为throwing
SuperException
…这可能意味着您必须更改封闭方法的签名,依此类推。

方法#2

try {     // stuff} catch (SuperException ex) {     if (ex instanceof Exception1 || ex instanceof Exception2) {         // handle exception     } else {         throw ex;     }}

同样,我们在签名方面存在潜在的问题。

方法#3

try {     // stuff} catch (SuperException ex) {     if (ex instanceof Exception1 || ex instanceof Exception2) {         // handle exception     }}

如果省略

else
零件(例如,因为目前没有其他子类型
SuperException
),则代码将变得更加脆弱。如果异常层次结构进行了重组,则没有的该处理程序
else
可能最终会悄悄地吞噬异常!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/497438.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号