1、不管有木有出现异常,finally块中代码都会执行;

2、当try和catch中有return时,finally仍然会执行;

3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;

4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

举例:
情况1:try{} catch(){}finally{} return;
            显然程序按顺序执行。

情况2:try{ return; }catch(){} finally{} return;
          程序执行try块中return之前(包括return语句中的表达式运算)代码;
         再执行finally块,最后执行try中return;
         finally块之后的语句return,因为程序在try中已经return所以不再执行。

情况3:try{ } catch(){return;} finally{} return;
         程序先执行try,如果遇到异常执行catch块,
         有异常:则执行catch中return之前(包括return语句中的表达式运算)代码,

再执行finally语句中全部代码,  
                        最后执行catch块中return. finally之后也就是4处的代码不再执行。
         无异常:执行完try再finally再return.

情况4:try{ return; }catch(){} finally{return;}
          程序执行try块中return之前(包括return语句中的表达式运算)代码;
          再执行finally块,因为finally块中有return所以提前退出。

情况5:try{} catch(){return;}finally{return;}
          程序执行catch块中return之前(包括return语句中的表达式运算)代码;
          再执行finally块,因为finally块中有return所以提前退出。

情况6:try{ return;}catch(){return;} finally{return;}
          程序执行try块中return之前(包括return语句中的表达式运算)代码;
          有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;
                       则再执行finally块,因为finally块中有return所以提前退出。
          无异常:则再执行finally块,因为finally块中有return所以提前退出。

最终结论:任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。
                  如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,
                  编译器把finally中的return实现为一个warning。

最新文章

  1. php使用递归创建多级目录
  2. SQL性能学习汇总 00
  3. jmeter
  4. Nim教程【十一】
  5. Router的创建者——RouteBuilder
  6. ArcGIS AddIN开发异常之--“ValidateAddInXMLTask”任务意外失败
  7. checkbox样式自定义
  8. ZYB's Premutation POJ5592
  9. SQL语句中各种数据类型转换方法总结
  10. CreateEvent的用法
  11. BAE3.0还不支持本地写入文件
  12. 几年的Git使用技巧总结
  13. css3百叶窗轮播图效果
  14. SVN和GIT的使用
  15. Bash shell命令记录和CentOS的一些技巧
  16. netty源码学习
  17. 用sort方法输出数组
  18. JavaScript中防止重复提交
  19. 微信浏览器Ajax请求返回值走error
  20. day3 python 阿狸的进阶之路

热门文章

  1. [置顶] WebService学习总结(3)——使用java JDK开发WebService
  2. 【Codeforces Round #442 (Div. 2) A】Alex and broken contest
  3. 最全Pycharm教程(42)——Pycharm扩展功能之Emacs外部编辑器
  4. 通达OA 小飞鱼在线开发培训第一讲介绍(图文)
  5. 【习题 3-4 UVA - 455】Periodic Strings
  6. [Angular] Change component default template (ng-content, ng-template, ngTemplateOutlet, TemplateRef)
  7. md5解密猜想
  8. 【7001】n阶法雷序列
  9. Java链接Redis时出现 “ERR Client sent AUTH, but no password is set” 异常的原因及解决办法
  10. ORACLE会话数、连接数配置