java捕获异常和抛出异常

In Java 7, catch block has been improved to handle multiple exceptions in a single catch block. If you are catching multiple exceptions and they have similar code, then using this feature will reduce code duplication. Let’s understand java catch multiple exceptions feature with an example.

在Java 7中,对catch块进行了改进,可以在单个catch块中处理多个异常。 如果捕获多个异常并且它们具有相似的代码,则使用此功能将减少代码重复。 让我们通过一个示例来了解Java捕获多个异常功能。

Java捕获多个异常 (Java catch multiple exceptions)

Before Java 7, we used to catch multiple exceptions one by one as shown below.

在Java 7之前,我们曾经一一捕获多个异常,如下所示。

catch (IOException ex) {logger.error(ex);throw new MyException(ex.getMessage());
catch (SQLException ex) {logger.error(ex);throw new MyException(ex.getMessage());
}

In Java 7, we can catch both these exceptions in a single catch block as:

在Java 7中,我们可以在单个catch块中捕获这两个异常,如下所示:

catch(IOException | SQLException ex){logger.error(ex);throw new MyException(ex.getMessage());
}

If a catch block handles multiple exceptions, you can separate them using a pipe (|) and in this case, exception parameter (ex) is final, so you can’t change it. The byte code generated by this feature is smaller and reduce code redundancy.

如果catch块处理多个异常,则可以使用管道(|)分隔它们,在这种情况下,异常参数(ex)是最终的,因此您无法更改它。 此功能生成的字节代码较小,并减少了代码冗余。

Java重新抛出异常 (Java rethrow exception)

Another improvement is done in Compiler analysis of rethrown exceptions. Java rethrow exception allows you to specify more specific exception types in the throws clause of a method declaration.

编译器对重新抛出的异常进行分析的另一项改进。 Java rethrow异常允许您在方法声明的throws子句中指定更特定的异常类型。

Let’s see this with a small example:

让我们来看一个小例子:

package com.journaldev.util;public class Java7MultipleExceptions {public static void main(String[] args) {try{rethrow("abc");}catch(FirstException | SecondException | ThirdException e){//below assignment will throw compile time exception since e is final//e = new Exception();System.out.println(e.getMessage());}}static void rethrow(String s) throws FirstException, SecondException,ThirdException {try {if (s.equals("First"))throw new FirstException("First");else if (s.equals("Second"))throw new SecondException("Second");elsethrow new ThirdException("Third");} catch (Exception e) {//below assignment disables the improved rethrow exception type checking feature of Java 7// e=new ThirdException();throw e;}}static class FirstException extends Exception {public FirstException(String msg) {super(msg);}}static class SecondException extends Exception {public SecondException(String msg) {super(msg);}}static class ThirdException extends Exception {public ThirdException(String msg) {super(msg);}}}

As you can see that in rethrow method, catch block is catching Exception but it’s not part of throws clause. Java 7 compiler analyze the complete try block to check what types of exceptions are thrown and then rethrown from the catch block.

如您所见,在rethrow方法中,catch块正在捕获Exception,但它不是throws子句的一部分。 Java 7编译器分析完整的try块,以检查引发了哪些类型的异常,然后将其从catch块中抛出。

Note that this analysis is disabled if you change the catch block argument.

请注意,如果更改catch块参数,则将禁用此分析。

Further Reading: Exception Handling in Java.

进一步阅读: Java中的异常处理 。

翻译自: https://www.journaldev.com/629/java-catch-multiple-exceptions-rethrow-exception

java捕获异常和抛出异常

java捕获异常和抛出异常_Java捕获多个异常,重新抛出异常相关推荐

  1. java获取屏幕图像_Java捕获当前屏幕图像

    Java捕获当前屏幕图像 作者:未知    文章来源:www.jspcn.net 发布日期:2005年01月19日 网友:缘来如此 提供 import java.awt.*; import java. ...

  2. java正则包含特殊字符_java – 捕获由特殊字符嵌套/包含的正则表达式组

    我正在尝试搜索出现在波浪号(〜)符号边框内的单词. e.g. ~albert~ is a ~good~ boy. 我知道这可以通过使用〜来实现. ?〜,它已经适合我了.但是有些特殊情况需要匹配嵌套的波 ...

  3. java string逆序_Java学习笔记(八)——异常

    本节主要内容是对 Java 的异常处理进行讲解,主要包含以下知识点: 异常分类 声明及抛出 捕获异常 自定义异常 * 异常堆栈 异常概述 对于程序的错误以及外部环境能够对用户造成的影响,我们应当及时报 ...

  4. java 跟踪错误程序_Java异常处理 如何跟踪异常的传播路径

    当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序. 可使用printStackTrace 和 getMessage方法了解异常发生的情况: printStackTrace:打印方 ...

  5. java代码抛出异常_Java中编写代码出现异常,如何抛出异常,如何捕获异常

    异常的产生过程解析 先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundsException.我们通过图解来解析下异常产生的过程. 工具类 classArrayTools ...

  6. java catch抛出异常_java异常——捕获异常+再次抛出异常与异常链

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常--捕获异常+再次抛出异常与异常链 的相关知识: [1]捕获异常相关 1.1)如果 ...

  7. java 同步块 抛出异常_java问题合集(一)

    垃圾回收算法 引用计数法,标记清除法,标记压缩清除法(Java中老年代采用),复制算法(Java中新生代采用),分代法(Java堆采用),分区算法. 重要的三句话: 垃圾回收器只知道释放那些经由new ...

  8. [转载] java 捕获异常还是抛出异常

    参考链接: 捕获基类和派生类为异常 今天在看hadoop源码时,想想自己最近在做的那个系统,发现很多异常处理的方式不对,还是按照传统的异常处理方式(即:采用返回值来标识程序出现的异常情况).而hado ...

  9. java 捕获异常还是抛出异常

    今天在看hadoop源码时,想想自己最近在做的那个系统,发现很多异常处理的方式不对,还是按照传统的异常处理方式(即:采用返回值来标识程序出现的异常情况).而hadoop中很多方法的声明是有异常抛出的, ...

最新文章

  1. 下载、安装、配置 java jdk1.8
  2. 想学python看什么书-我以前从没学过编程,学Python看什么书?
  3. .NET资源文件实现多语言切换
  4. php如何检测图片背景是白色,javascript – 用PHP检测白色图像背景?
  5. 数据库压测 oracle,sysbench压测Oracle
  6. 开发板接传感器蜂鸣器不断_迅为IMX6ULL终结技开发板初体验
  7. php getcount_PHP中关键字interface和implements详解
  8. python根据模板生成pdf文件_程序生成word与PDF文档的方法(python)
  9. 清北学堂2019.5.3
  10. C# VS如何整个项目中查找字符串
  11. 2010年最令人期待的10款视频游戏
  12. python实战笔记之(4):刷博客浏览量
  13. TikTok二面: 说下二维码登录的原理?
  14. 以图搜图 图像匹配_sift 实现以图搜图
  15. 掌上军营服务器信息,智慧军营之视频监控系统
  16. python二维码_Python 二维码制作
  17. CSS3图片边框四个角剪切
  18. css 图片变大缩小,css3实现图片的变大变小
  19. 软件测试面试拿offer拿到手软,这份简历你值得一看
  20. Outlook配置163邮箱

热门文章

  1. linux 服务器网络有关的内核参数
  2. 一步步学习微软InfoPath2010和SP2010--第十二章节--管理和监控InfoPath Form Services(IPFS)(4)--监控含图片控件的Products表单...
  3. [学习整理]eclipe/MyEclipse:重要的快捷键
  4. 【转】Sections Headers for Android ListViews
  5. ACM PKU 1019 Number Sequence http://acm.pku.edu.cn/JudgeOnline/problem?id=1019
  6. 强大的SqlCacheDependency【转】
  7. 学习Direct3D(五)应用程序入口
  8. [转载] 使用python完成冒泡排序_使用python实现-冒泡排序
  9. [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
  10. [转载] 康威的人生游戏与轻量级模式