Jdk1.7 catch 可以写多个类型的Exception

今天在写代码的时候,发现了一个问题:


try{
    Subject subject = ShiroUtil.getSubject();
    UsernamePasswordToken token = new UsernamePasswordToken(map.get("account"),map.get("password"));
    subject.login(token);
}catch (UnknownAccountException e) {
   return RUtil.error(REnum.USERNAME_OR_PASSWORD_ERROR.getCode(),REnum.USERNAME_OR_PASSWORD_ERROR.getMessage());
}catch (IncorrectCredentialsException e) {
   return RUtil.error(REnum.USERNAME_OR_PASSWORD_ERROR.getCode(),REnum.USERNAME_OR_PASSWORD_ERROR.getMessage());

可以看到这个两个catch下的代码重复了,这违背了“不写相同两行代码”的原则,后来在好奇心的趋使下,百度了一下,原来在jdk1.7的时候,可以用“|”来连接两个异常类,像这样:

try {
        Subject subject = ShiroUtil.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(userMap.get("account"),userMap.get("password"));
        subject.login(token);
}catch(UnknownAccountException | IncorrectCredentialsException e){
    return ResultVoUtil.erro(REnum.USERNAME_OR_PASSWORD_ERROR.getCode(),REnum.USERNAME_OR_PASSWORD_ERROR.getMessage());
}

如果用一个catch块处理多个异常,可以用管道符(|)将它们分开,在这种情况下异常参数变量(ex)是定义为final的,所以不能被修改。这一特性将生成更少的字节码并减少代码冗余。

另一个升级是编译器对重新抛出异常(rethrown exceptions)的处理。这一特性允许在一个方法声明的throws从句中指定更多特定的异常类型。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来日可期1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值