Java 7异常新特性之mutilcatch
创始人
2024-07-24 08:00:43
0

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

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

捕捉多种异常类型

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

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

Java代码

  1. // CopyToDatabaseOrFile.java      
  2.     
  3. import java.io.IOException;      
  4.     
  5. import java.sql.SQLException;      
  6.     
  7. public class CopyToDatabaseOrFile {      
  8.     
  9.       
  10.     
  11. public static void main(String[] args) {     
  12.     
  13. try {      
  14.     
  15. copy();      
  16.     
  17. } catch (IOException ex) {     
  18.     
  19. System.out.println(ex.getMessage()); // additional handler code      
  20.     
  21. } catch (SQLException ex) {      
  22.     
  23. System.out.println(ex.getMessage()); // additional handler code that's identical to the previous handler's // code      
  24.     
  25. }      
  26.     
  27. }      
  28.     
  29.       
  30.     
  31. static void copy() throws IOException, SQLException {     
  32.     
  33. if (Math.random() < 0.5)      
  34.     
  35. throw new IOException("cannot copy to file");      
  36.     
  37. else      
  38.     
  39. throw new SQLException("cannot copy to database");      
  40.     
  41. }      
  42.     
  43.       
  44.     
  45. }   

 

清单1: CopyToDatabaseOrFile.java

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

Java代码

  1. try{     
  2.    copy();     
  3. }catch (IOException | SQLException ex){      
  4.   System.out.println(ex.getMessage());     
  5. }  

 

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

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

【编辑推荐】

  1. Java 7将于明年7月28日正式发布面向开发者
  2. Java 7,一个技术标准的商业咒语
  3. Java 7 未按时发布 计划再次延期
  4. Oracle和JCP成员之间的Java战争一触即发
  5. IBM加入OpenJDK 将联手Oracle发展Java技术

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...