Java7异常新特性之mutilcatch

 历经4年,Java7终于和大家见面。关于Java7的新特性,详见这里

 

 Java7增强了Java的异常处理机制,主要表现为三个方面:捕捉多种异常类型(multicatch);重新抛出(rethrow)异常;简化资源清理(try-with-resources)

 

捕捉多种异常类型

从Java7开始,你就可以在一个catch块中捕捉多种类型的异常了。增加multicatch的特性的主要是为了降低重复代码和较少过大范围的异常捕捉(例如这样的捕捉 catch(Exception e))。

 

假如你正开发这样一个应用程序,这个程序可以灵活地将数据复制到数据库或者文件中,清单1(CopyToDatabaseOrFile.java)模拟了这种程序, 展示了在catch模块中存在重复代码的现象:

 

 

// CopyToDatabaseOrFile.java 

import java.io.IOException; 

import java.sql.SQLException; 

public class CopyToDatabaseOrFile { 

 

public static void main(String[] args) {

try { 

copy(); 

} catch (IOException ex) {

System.out.println(ex.getMessage()); // additional handler code 

} catch (SQLException ex) { 

System.out.println(ex.getMessage()); // additional handler code that's identical to the previous handler's // code 

} 

} 

 

static void copy() throws IOException, SQLException {

if (Math.random() < 0.5) 

throw new IOException("cannot copy to file"); 

else 

throw new SQLException("cannot copy to database"); 

} 

 

} 

  

清单1: CopyToDatabaseOrFile.java

 

Java7克服了这种代码重复的问题。你只需在一个catch块中指定多个需要处理的异常,将这些异常按顺序排列,并用“|”分隔每个异常。如:

try{
   copy();
}catch (IOException | SQLException ex){ 
  System.out.println(ex.getMessage());
}

 

现在,当copy()方法抛出任何一种类型,都会在catch块中被捕捉。

 

当在catch中声明多种异常时,被声明的异常默认为final的,也就是说不能再修改异常的引用。如上例中,不能再将ex赋值给另外一个异常(如ex=new MyException())。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值