关于 try catch throw 的关系

常规的异常处理:

通常情况下,我们在方法调用的时候,如a方法里面 有对b方法的调用,在b方法中对可能出现异常的部分进行 try catch 的捕获,在catch 中 我们有时候会为了让上一层明确异常的原因,会自定义异常并抛出异常,并且会在该方法的后面去做 throws Exception的操作。如下图:
方法a调用方法b在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果就是顺其自然的,上层接收到了抛出的新的异常,并且捕获和打印出来没有问题。
我们理所当然的觉得,是b方法的throws Exception的作用产生了效果。
这里的判断是没有问题的,因为我们在b方法的catch框当中故意抛出了异常,所以java编译规范会强制我们在b方法去throws的操作,而在a方法也就不得不强制用try catch来捕获异常了。

实际场景:

而在我们的实际开发过程中,并不能一眼看出异常所在,很难精准的去try catch 甚至 抛出一个明确的异常,那就不会有b 方法的 try catch 和catch 的throw行为,但是为了避免影响a方法后续的动作执行,我们不得不在调用b方法时候,利用try catch 进行异常捕捉。则实际的开放场景如下图:
在这里插入图片描述
在这里插入图片描述
可以看到b方法并没有向上抛出异常,那么此时的a方法的try catch是否能捕获异常呢?看结果:
在这里插入图片描述
所以,虽然我们在b方法并没有向上抛出异常,但是a方法却正确的捕获到了异常。

结论:

在上述的demo中,我们看到,在b方法throws 异常的时候,a方法成功捕获异常,这个是常规的逻辑没有问题。而在b方法中出现了意想不到的异常并没有做 throws 异常的操作的时候,我们看到,a方法同样成功捕获异常。
证明,当出现异常的时候,不论是否写throws Exception,底层方法是会默认向上抛出的。去写throws Exception 的作用更多的是一种规范,可以让上层的方法强制写try catch去捕获异常,否则编译无法通过,从而让代码更加具有可读性。

有不同结论的小伙伴欢迎评论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值