在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,现在通过下面的例子加以说明:

第一种情况:try中包含return语句,finally中不包含

Java代码
  1. publicclassTestTry{
  2. staticStrings="";
  3. publicstaticvoidmain(Stringargs[]){
  4. s=test1();
  5. System.out.println("8"+s);
  6. }
  7. publicstaticStringtest1(){
  8. try{
  9. System.out.println("try.....");
  10. returns="a";
  11. }
  12. finally{
  13. s="b";
  14. System.out.println("17"+s);
  15. }
  16. }
  17. }
public class TestTry {static String s="";public static void main(String args[]){s = test1();System.out.println("8  "+s);}public static String test1(){try{System.out.println("try.....");return s = "a";}finally{s="b";   System.out.println("17  "+s);}}
}

这里我们定义了一个字符串 s,在try里面将"a"赋值给s,并直接返回,在finally里面把"b"赋值给s,最终s的值是a还是b呢?下面是执行的结果

Java代码
  1. try.....
  2. 17b
  3. 8a
try.....
17  b
8  a

我们发现最后的结果是a,但是b优先于a打印出来了,这是为什么呢?通过debug单步调试我们发现,在执行try中的return之前会先执行finally中的代码,之后再执行return语句。如果finally中也包含return语句,会出现什么情况呢,我们看第二种情况。

第二种情况:try,finally中都包含return语句

我们将上面的代码稍作改动

Java代码
  1. publicclassTestTry{
  2. staticStrings="";
  3. publicstaticvoidmain(Stringargs[]){
  4. s=test1();
  5. System.out.println("8"+s);
  6. }
  7. publicstaticStringtest1(){
  8. try{
  9. System.out.println("try.....");
  10. returns="a";
  11. }
  12. finally{
  13. returns="b";
  14. }
  15. }
  16. }
public class TestTry {static String s="";public static void main(String args[]){s = test1();System.out.println("8  "+s);}public static String test1(){try{System.out.println("try.....");return s = "a";}finally{return s="b";    }}
}

将finally中的s="b";直接改成return s="b";,会出现什么样的结果呢?字符串s是a还是b呢?

Java代码
  1. try.....
  2. 8b
try.....
8  b

我们发现最后的打印结果是b。

结论:1.无论try里面有没有return语句,finally语句一定都会执行(不愧是finally,名字起的好)。

2.如果finally中没有return语句,try里面有return,那么在执行try中的return语句之前会先去执行finally中的代码,再去执行try中的return语句,此时finally中的赋值不会改变或影响try中的return结果。

如果在finally中也包含return语句,将会直接返回,不再去执行try中的return语句。此时finally的结果覆盖try中return中的结果。

转载:http://wtrlay.iteye.com/blog/1122744

当try和finally都包含return时相关推荐

  1. Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

    转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提 ...

  2. LeetCode 2133. 检查是否每一行每一列都包含全部整数

    文章目录 1. 题目 2. 解题 1. 题目 对一个大小为 n x n 的矩阵而言,如果其每一行和每一列都包含从 1 到 n 的 全部 整数(含 1 和 n),则认为该矩阵是一个 有效 矩阵. 给你一 ...

  3. Java中try、finally语句中有return时的执行情况

    在Java中当try.finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,现在通过下面的例子 ...

  4. 网站服务器费用是什么,建网站费用都包含什么

    建网站费用都包含什么 2020-02-06 13:43:56 平台网站在当代社会发展之中是不可或缺的,各个领域全是会应用到平台网站的.能够说现阶段建网站的要求是十分的大的,在开展这一项工作中的全过程之 ...

  5. java的tey语句return了_Java中try、finally语句中有return时的执行情况

    在Java中当try.finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,现在通过下面的例子 ...

  6. sql包含怎么写_实习生简历怎么写?都包含哪些内容?

    一年毕业季又快到了,每年应届毕业人数都在增长,面对茫茫找工作的人潮,你是否有所恐慌?如果大学没有太多经历的话,只是去应聘实习生,那么实习生简历要怎么写呢.今天我们就来讲讲实习生简历模板都包含哪些内容. ...

  7. 计算机软件开发包含类容,系统程序开发软件的运行日志都包含哪些内容

    从小我们就被老师要求写日记,长大了上班之后又被要求写日报.周报..月报.而同样的,对于程序员来说,系统操作日志也是需要准备一份的,当然了,这个就不需要工程师自己写了,只要在程序中做好设定就可以. 今天 ...

  8. 改版的PMP很难吗?新考纲3大模块都包含哪些内容?如何提高通过率?

    在PMP新考纲中,所考的内容约有50%内容体现在项目管理中的预测法内,而另外的一半则是体现敏捷方法或混合方法.而三者(预测法.敏捷方法和混合方法)方法又将体现在三大领域:人员.过程.业务环境内,并非独 ...

  9. 台式计算机是否属于工装,工装分类《机械加工所谓的工装都包含什么?》

    工装分类<机械加工所谓的工装都包含什么?> 674人已浏览 时间 : 2020-08-27 16:37:30 导语:机械上什么是工装都有哪些?1.工装的定义工装"即生产过程工艺: ...

最新文章

  1. 2018-01-02 JavaScript实现ZLOGO: 用语法树实现多层循环...
  2. WPF PRISM开发入门一( 初始化PRISM WPF程序)
  3. SAP FICO年结
  4. SaaS 中 6 种常见 UI 入职模式
  5. jithub使用整理资料
  6. 中国 IPv6 网民活跃用户达 3.62 亿,但 App 支持与国外差距较大!
  7. @Python 开发者,如何更加高效地编写代码?
  8. Acrobat DC安装方法
  9. 《深入浅出数据分析》
  10. 推荐一款在线文件对比工具
  11. 探索性测试方法讲解之一
  12. 优化器TORCH.OPTIM
  13. linux温度软件,linux-查看cpu温度的方法
  14. word生成html冗余清理,如何清除WORD冗余格式代码(转)
  15. ubuntu16.04 NVIDIA gtx1050 驱动安装
  16. 一种基于蓝牙的电视锁实现方案
  17. jy-12-SPRINGMYBATIS02——云笔记05-刘苍松
  18. 推荐一个GitHub上牛b的Java学习项目已整理成了文档版本
  19. AI+教育 I 69天流利说APP学习浅谈自适应学习
  20. PHP孟加拉钢厂_孟加拉国帕德玛大桥合龙

热门文章

  1. 安卓Android Support Design Library——Snackbar
  2. [Aaronyang] 写给自己的WPF4.5 笔记[2依赖属性]
  3. python simple example
  4. JavaScript 作用域不完全指北
  5. 2018-10-05学习笔记
  6. 在Centos7上搭建Mysql数据库
  7. 基于Keras机器学习库的分类预测
  8. [POJ1743]Musical Theme
  9. Lua 正确的尾调用(proper tail call)
  10. MySQL内核月报 2014.09-MySQL· 捉虫动态·auto_increment