在java重新认识TryCatch

àì夳堔傛蜴生んèń 2022-06-12 04:55 288阅读 0赞
  1. 敲过代码的同志们都知道,在程序中处理异常我们常用Try Catch结构的代码来接收,处理异常,那么我们是否真的已经了解了try catch了呢?

一、问题的提出

  1. 在去面试的时候面试官曾经问过我这样的问题,如果我在try的方法体中写了一个return,在catch中写了一个return,在finaly中也写了一个return,问如果没有异常是哪个return触发,如果有异常是哪个return触发?当时就懵了,感觉似曾相识的问题竟然还可以这么问,然后再开发ITOO的晨会上,组长也明确了,异常的接收和处理的过程是不能有多个return作为出口的,要做到单入单出,这样才能让我们的程序更加规范。所以很有必要深入研究一下。
  2. 请看下面的例子,用到了try catch的一些实现。

二、验证

  1. 做验证么,我们就要有一个程序作为铺垫在模拟这个过程,首先我在service层定义了一个方法,用来被调用,他会输出字符或者抛出异常。
  2. public String testTry(String asd) throws Exception {
  3. throw new Exception("抛出");
  4. }
  5. 然后在facade层写了一个方法用来接收处理异常:
  6. public String testTry(String asd){
  7. try {
  8. return teachSecretariesCurriculumScheduleService.testTry(asd) + asd+"正常";
  9. }catch(Exception e){
  10. return asd+"catch";
  11. }finally {
  12. return asd + "finally";
  13. }
  14. }
  15. 最后写一个测试用的方法来调用:
  16. @Test
  17. public void testTry()
  18. {
  19. String asd="结果为:";
  20. String Result = teachSecretariesCurriculumFacade.testTry(asd);
  21. System.out.println(Result);
  22. }
  23. 我们运行这个结果,可以看到最后系统输出为
  24. 结果为:finally
  25. 我们可以见到出现异常的时候通常是走finally里面的return的,如果我们把finally删除之后会如何呢?
  26. 结果为:catch
  27. 这里可以说明,异常被catch了,走了catch里面的return方法。这样就可以说明了在出现异常并且catchfinally都有return的时候,只走finallyreturn
  28. 我们再来看一下,如果不返回异常,而是返回一个确定值的话会怎么样呢?
  29. 改造service层的代码,facadefinally的情况:
  30. public String testTry(String asd) throws Exception {
  31. return "true";
  32. }
  33. 然后再看我们的程序,运行会发现结果为:
  34. 结果为:finally
  35. 我们可以看到在没有报异常的情况下,还是会走finally下的return,而不是走try下面的return。如果我们去掉finally会怎么样呢?
  36. 结果为:true
  37. 这说明什么呢,说明了去掉了finally之后我们的程序直接走的try下面的return方法,这个说明了finally存在的含义就是必须执行,所以程序会自动屏蔽除了finally之外的步骤里面的return语句(如果有的话),但是非return语句是不受影响的,我们可以在trycatchfinally后面加上system.out.println("try/catch/finally") 然后我们输出可以看到相应的结果,这里不再举例。

三、总结

  1. 总的来说,try/catch语句的原则还是以finally为重的,当每个段内都有return的这种只能执行一次的代码的时候,编译器会自动屏蔽掉除了finally之外的阶段里面的return语句的执行,但是其他的代码并不会,所以如果写了try/catch的语句,并且用了多个return,那么,不用担心,因为系统只会执行一个return语句,只是你知不知道他走的是哪一个的问题把了,还有你的小伙伴能不能理解你写的代码的意思了。

发表评论

表情:
评论列表 (有 0 条评论,288人围观)

还没有评论,来说两句吧...

相关阅读

    相关 重构之重新认识

    重构?每次听到这个词,头脑里面闪现的就是“推倒重做,代码重写”,那到底重构是什么玩意?所谓“外事不决问谷歌,内事不决问百度,房事不决问天涯”,百度百科上面的解释是:重构(Ref

    相关 重新认识C语言

    重新认识Linux C语言 1.函数的隐形声明(implicit Declaration):main函数使用没有先声明的函数的时候,编译器就会认为在使用此个函数的      

    相关 重新认识秦始皇

    由于本人 特别喜欢 曹操 秦始皇 刘邦 韩信 最近又找到一些资源,想分享给大家 让大家重新认识下 秦始皇 [视频资源地址][Link 1] [Link 1]: ht

    相关 重新认识面向对象

    对象是什么? – 从概念层面讲,对象是某种拥有责任的抽象。 – 从规格层面讲,对象是一系列可以被其他对象使用的公共接口。 – 从语言实现层面来看,对象封装了代码和数