初探Java 7异常处理功能增强
初探Java 7异常处理功能增强
今天我们来看看Java 异常处理方面的功能增强 来自Coin项目的又一个细微语言增强已经被包含在Java 中 由谷歌专任工程师兼Java讲师Neal Gafter提出的Java增强异常处理功能 Open JDK开发的领导者Joe Darcy已经在其博客上宣布了这个变化
此次变动增加了两处对异常处理机制的细微增强
◆Multicatch 开发者现在能够在一个catch代码块中捕获多个异常类型
◆Final Rethrow 它可以让开发者捕获一个异常类型及其子类型 并且无需向方法声明中增加抛出子句 就能重新将其抛出
过去我们在捕获多个异常类型时 往往会使用以下类型的代码
} catch (FirstException ex) {
logger error(ex);
throw ex;
} catch (SecondException ex) {
logger error(ex);
throw ex;

}
但是以上代码除了冗长外没有什么优点 一个解决办法是找出这两个异常类型的共同子类型 只对其进行捕获并抛出 但是这种方法通常会捕获一些你并不需要的异常
现在借助于新增的功能 开发者可以使用以下代码
} catch (FirstException | SecondException ex) {
logger error(ex);
throw ex;
}
这种代码看上去要简洁清晰的多
第二个增强功能要复杂一些 假如开发者希望捕获所有异常 在进行必要的几个操作后 再将其抛出 就代码编写而言并不是一件难事 但是开发者必须在方法声明中增加一个抛出子句 来管理自己代码发出的新异常 而现在借助于Final Rethrow 开发者无需增加一个异常抛出子句就能完成此项任务
try {
// some code
} catch (final Throwable ex) {
// some more code
throw ex;
}
通过使用final关键字 开发者可以抛出所需的准确动态类型异常 这样如果一个IOException异常发生 那么IOException将被抛出 当然 开发者必须声明不被捕获的异常 如果开发者在try代码块(在//some more code部分)中没有捕获任何异常 抛出子句则与以前完全相同 反之如果捕获到某些异常 开发者则可以进行相应处理
Java 中的multi catch是一个非常好的功能 但是final rethrow对程序员来说并不常用
lishixinzhi/Article/program/Java/hx/201311/26609