在java的学习中,关于异常的处理是很重要的一环,笔者最近在学习这一方面的知识时就遇到了一个问题:就是在try语句块中写了return,但后面又写了finally语句,那么程序到底是先执行return语句呢还是先执行finally语句。

磨刀不误砍柴工,先来回顾一下有关try-catch语句块的只是要点。在异常处理的语法中往往伴随着try-catch语句块的出现,但是就异常处理的语法结构上来说只有try块是必须的,也就是说,如果没有try块,则不能有后面的catch块和finally块,catch块和finally块是可选的,但是catch块和finally块要至少出现一个。当然也可以同时出现,可以有多个catch块,捕获父类异常的catch块必须位于捕获子类异常的后面。但是不能同时没有两者,多个catch块必须位于try块之后,finally块必须位于所有的catch块之后,因为finally通常用于资源的回收,异常处理中的finally块总会被执行。

说了这么多,还是回到前面的问题上来,接下来就是代码的证明:

public class TryTest {public static void main(String[] args){System.out.println(test());}//自定义一个test测试函数public static boolean test(){try{//用来检测try块里面处于return前的语句是否有被执行System.out.println("此时try语句块正在被执行");return false;}finally{  //用来检测finally语句块中的语句有没有被执行System.out.println("此时finally语句块正在被执行");return true;}       }
}

程序最后运行的结果是:

此时try语句块正在被执行
此时finally语句块正在被执行
true

通过程序的运行结果可以看出,try中的return语句并没有被执行。

如果我注释掉finally语句块中return语句,程序的运行结果又会是什么样的呢?

此时try语句块正在被执行
此时finally语句块正在被执行
false

通过这两个运行结果的不同,我们不难得出结论

当java程序在执行try块、catch块时如果遇到了return或者throw时,这两个语句都会导致该方法立即结束,但是系统在执行这两个语句时并不会结束该方法,而是去寻找该异常处理流中是否包含了finally语句块,如果没有finally块,则程序会立即执行return或者throw语句,方法终止。如果有finally语句块,系统会开始立即执行finally语句块,只有当finally语句块中的代码被执行完了之后,系统才会回来再次执行try块或者catch块中的return或throw语句,但是如果finally块中也有return或者throw这样能是方法结束的语句,则finally块就会立即结束该方法,系统将不会跳回去执行try块或者catch中的任何语句。

所以在注释掉finally块中的return语句后,程序再次跳到了try中的return语句,最后结果返回了false。

在try中写了return,后面又写了finally,是先执行return还是先执行fianlly相关推荐

  1. c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题

    c++中带返回值函数没写return能通过编译但运行时会出现奇怪问题 例如: string myFunc(){ theLogics(); } 发现调用: myFunc(); 崩溃. 但调用: cout ...

  2. python中return ab是什么意思_python中return一般怎么写

    python中return的用法 1.return语句就是把执行结果返回到调用的地方,并把程序的控制权一起返回 程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return ...

  3. 谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo

    谈谈我对前端组件化中"组件"的理解,顺带写个Vue与React的demo 前言 前端已经过了单兵作战的时代了,现在一个稍微复杂一点的项目都需要几个人协同开发,一个战略级别的APP的 ...

  4. 解决python中import时无法识别自己写的包和模块的方法

    https://www.cnblogs.com/foreverlin/p/10846698.html 2方法感觉不生效,写在sys.path.append()写在单独的py文件中 https://bl ...

  5. python循环语句-python中的for循环语句怎么写

    python中的for循环语句怎么写? Python for 循环语句 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串. for循环的语法格式如下: 1 2 for iter ...

  6. idea中构造器和toString方法覆写的快捷键

    idea中构造器和toString方法覆写的快捷键 写上一篇博文已经是3个月前的事情了,这中间因为各种杂事耽搁,好久没有学习我的Java了.要利用这个暑假好好的学习一波了. 废话不多说,进入主题. 老 ...

  7. 科技论文中的分析与综合-如何写好科技论文之我见(七)

    科技论文中的分析与综合-----如何写好科技论文之我见(七) 闵应骅 分析与综合这两术语大家经常用.但是,真要说它们的定义,那可是哲学范围里的事.形式逻辑里面就有分析与综合.我在初中教几何的时候,就常 ...

  8. python的for循环语句怎么写_python中的for循环语句怎么写

    python中的for循环语句怎么写? Python for 循环语句 Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串. for循环的语法格式如下:for iterating ...

  9. ITK:迭代图像中的区域,而无需写访问权即可访问索引

    ITK:迭代图像中的区域,而无需写访问权即可访问索引 内容提要 输出结果 C++实现代码 内容提要 通过有效访问当前索引(无写访问权限)遍历图像的区域. 输出结果 An extensive list ...

  10. SQL server触发器中 update insert delete 分别给写个例子被。

    SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...

最新文章

  1. 不错的工具:Reflector for .NET
  2. BZOJ1396:识别子串(SAM)
  3. sql数据库常见命令总结
  4. Ubuntu常用基础命令
  5. Windows 11 大更新!可安装超千款 Android 应用
  6. c语言学生管理系统修改密码,C语言下的学生管理系统(含密码加密和验证码).doc...
  7. 查重多少合格_期刊论文查重一般多少合格?
  8. Network 第六篇 - 三层交换机配置路由功能
  9. 关于泊松过程的参数估计
  10. 跌落测试显示:iPhone 13/13 Pro耐用性和前代几乎相同
  11. SFB 项目经验-45-用培训课件当运维文档,聪明
  12. 阿里云 mysql 连接 慢_记录在阿里云上遇到的一个坑-数据库连接请求缓慢
  13. 一文通俗理解最大似然估计· 看不懂你打我,无公式
  14. webpack, react项目中利用外部JS库提升效率
  15. Hibernate 查询
  16. 逃逸分析、栈上分配、标量替换、同步消除、锁消除
  17. 安装虚拟机vmware8.0.4版本
  18. FileZilla Server使用实践
  19. 【老生谈算法】matlab实现图像复原算法源码——图像复原
  20. 5G商用牌照的发放对物联网意味着什么

热门文章

  1. 中国人民公安大学(PPSUC) 网络对抗技术作业一
  2. npm创建react项目
  3. 【BIRT】02_开发一张简单的报表
  4. C# DataTable.Select() 筛选数据
  5. Xtrabackup2.4.8备份、还原、恢复Mysql5.7.19实操
  6. HashMap的key可以是可变的对象吗???
  7. 百度js选择器fox
  8. 2018-2019-2 网络对抗技术 20165115 Exp6 信息搜集与漏洞扫描
  9. C++使用major做变量名的问题
  10. 20155238 2016-2017-2 《Java程序设计》第三周学习总结