java catch 多个异常_Java捕获多个异常和重新抛出异常

Java7 引入了改进的异常处理机制,允许在单个catch块中捕获多个异常,减少了代码冗余。例如,以前需要分别捕获IOException和SQLException,现在可以用'|'分隔在一个catch块中处理。此外,Java7还改进了重新抛出异常的编译器分析,使得在方法声明的throws子句中指定更具体的异常类型成为可能。这提高了代码的简洁性和可读性。
摘要由CSDN通过智能技术生成

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

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

catch (IOException ex) {

logger.error(ex);

throw new MyException(ex.getMessage());

catch (SQLException ex) {

logger.error(ex);

throw new MyException(ex.getMessage());

}

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

catch(IOException | SQLException ex){

logger.error(ex);

throw new MyException(ex.getMessage());

}

如果catch块处理多个异常,可以使用竖线(|)将它们分开,在这种情况下,exception参数(ex)是final,因此无法更改它。此功能使代码更少,可减少代码冗余。

Java重新抛出异常

在重新抛出异常的编译器分析中完成了另一项改进。Java rethrow异常用于在方法声明的throws子句中指定更具体的异常类型。

让我们看下面一个例子:

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");

else

throw 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);

}

}

}

正如在上面所看到的,在rethrow方法中,catch块捕捉Exception,但它不是throws子句的一部分。Java 7编译器分析完整的try块以检查抛出哪些类型的异常,然后从catch块重新抛出。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值