finally中的异常会覆盖try中的异常怎么办

finally中的异常会覆盖try中的异常怎么办

这篇文章给大家分享的是有关finally中的异常会覆盖try中的异常怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

  • 如下代码, 最后在日志中只能看到 finally 中的异常,

    finally中的异常会覆盖try中的异常怎么办

    • 虽然 try 中的逻辑出现了异常,但却被 finally 中的异常覆盖了。

  • 这是非常危险的,特别是 finally 中出现的异常是偶发的

    • 就会在部分时候覆盖 try 中的异常,让问题更不明显

  • 至于异常为什么被覆盖,原因也很简单,

    • 因为一个方法无法出现两个异常

@GetMapping("wrong")publicvoidwrong(){try{log.info("try");//异常丢失thrownewRuntimeException("try");}finally{log.info("finally");thrownewRuntimeException("finally");}}

[13:34:42.247] [http-nio-45678-exec-1] [ERROR] [.a.c.c.C.[.[.[/].[dispatcherServlet]:175 ] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: finally] with root cause
java.lang.RuntimeException: finally

  • 修复如下:(只抛出该抛出的异常)

/***修复方法一*/@GetMapping("right")publicvoidright(){try{log.info("try");thrownewRuntimeException("try");}finally{log.info("finally");try{thrownewRuntimeException("finally");}catch(Exceptionex){log.error("finally",ex);}}}

/***修复方法二*/@GetMapping("right2")publicvoidright2()throwsException{Exceptione=null;try{log.info("try");thrownewRuntimeException("try");}catch(Exceptionex){e=ex;}finally{log.info("finally");try{thrownewRuntimeException("finally");}catch(Exceptionex){if(e!=null){e.addSuppressed(ex);}else{e=ex;}}}throwe;}


java.lang.RuntimeException: try
at org.geekbang.time.commonmistakes.exception.finallyissue.FinallyIssueController.right2(FinallyIssueController.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
Suppressed: java.lang.RuntimeException: finally
at org.geekbang.time.commonmistakes.exception.finallyissue.FinallyIssueController.right2(FinallyIssueController.java:75)
... 54 common frames omitted

感谢各位的阅读!关于“finally中的异常会覆盖try中的异常怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

发布于 2022-01-05 23:21:47
收藏
分享
海报
0 条评论
48
上一篇:.Net Core分布式部署中的DataProtection密钥安全实例分析 下一篇:Spring提供的RedisSerializer有什么用
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码