掌握下面几条原则就可以完全解决“当try、catch、finally遭遇return”的问题。

原则:1、finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行。

2、 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行)、finally语句块。

3、函数必须确保有唯一返回值

说明: try中如果包含return语句则catch块和finally块中必须至少有一个含有return语句。或者try中通过throw new Exception();抛出异常,则catch与finally中至少有一个return语句。因为try块会假定其中发生异常,且try块中的代码要么顺利执行,要么抛出异常。如果只在try块中包含return语句不能保证函数有返回值(如try抛出时,return语句不会执行)。所以为了保证函数具有返回值,java强制要求原则。

4、return语句的优先级是finally最大,且try与catch块中只有两者之一的return语句会被执行。为保证函数只有一个返回值则返回优先级最大的值。

java 的异常处理中,
在不抛出异常的情况下,程序执行完 try 里面的代码块之后,该方法并不会立即结束,而是继续试图去寻找该方法有没有 finally 的代码块,
如果没有 finally 代码块,整个方法在执行完 try 代码块后返回相应的值来结束整个方法;
如果有 finally 代码块,此时程序执行到 try 代码块里的 return 语句之时并不会立即执行 return,而是先去执行 finally 代码块里的代码,
若 finally 代码块里没有 return 或没有能够终止程序的代码,程序将在执行完 finally 代码块代码之后再返回 try 代码块执行 return 语句来结束整个方法;
若 finally 代码块里有 return 或含有能够终止程序的代码,方法将在执行完 finally 之后被结束,不再跳回 try 代码块执行 return。
在抛出异常的情况下,原理也是和上面的一样的,你把上面说到的 try 换成 catch 去理解就 OK 了 *_*

http://blog.csdn.net/lu_ca/article/details/52184423

http://www.cnblogs.com/changkai244/p/4108768.html

http://blog.csdn.net/kavensu/article/details/8067850

最新文章

  1. OAuth2 Backend Web Application 验证过程
  2. Android TextView内容过长加省略号,点击显示全部内容
  3. Shell 的source命令
  4. vssettings 的备份和导入
  5. Delphi 为什么它提示PCHAR是不安全的类型呢 Unsafe type 'PChar'
  6. png24是支持Alpha透明的。。。。。。
  7. SQL Server 控制锁升级
  8. 【Java疑难杂症】有return的情况下try catch finally的执行顺序
  9. 可空类型 Nullable<T>
  10. VLAN之间单臂路由通信
  11. python---用户登录程序
  12. pl/sql学习(6): 引号/程序调试/列中的字符串合并/正则表达式
  13. Docker Data Center系列(三)- DTR安装指南
  14. Junit介绍以及使用
  15. Uva439:BFS题目总结
  16. Microsoft/Git-Credential-Manager-for-Mac-and-Linux
  17. Excel导入
  18. oracle 更新用户密码,授连接权限,
  19. Android分享到微信和朋友圈的工具类
  20. python 字典输出键值对

热门文章

  1. window10 安装.net framework 2.0插件
  2. ubuntu下如何使用apt-get安装arm64的交叉编译工具链?
  3. ubuntu下如何安装7z压缩工具?
  4. 怎么彻底关闭卸载删除Cortana小娜进程,最简单
  5. RedHat Enterprise7 修改为CentOS的yum源
  6. Linux 查看Tomcat版本信息
  7. A股委托类型
  8. Redis Guide
  9. SpringCloud简历模板
  10. freeRTOS学习一