关于try,finally。finally一定会执行吗?

答案肯定不是。

先看一下结论:
(1)当出现在try之前就有结果返回,也就是有return时,则不会往下执行。
(2)当try之中出现异常时,会执行catch语句,然后是finally;当try中有return时,会将结果返回给finally,然后看finally中是否还有返回语句,如果有则将finally中的结果返回,finally中没有返回语句则将try中的返回语句返回。

进入正文
以案例来说明:

  1. try之前就结果返回
public class Demo01 {private static int test() {int i = 1;if (i == 1) {return i;}try {System.out.println("执行try");} finally {System.out.println("执行finally");}return 0;}public static void main(String[] args) {System.out.println("执行main:" + test());}
}

结果如下:

解释:因为try之前已经return,所以程序中的方法后边就不执行了。也就是finally也不会执行。

  1. try中有异常
public class Demo02 {private static int test02() {try {System.out.println("执行try");return 1 / 0;} catch (Exception e) {System.out.println("执行catch");return 11;} finally {System.out.println("执行finally");}}public static void main(String[] args) {System.out.println("执行main:" + test02());}
}

结果如下:

解释:因为try之前没有return,先执行try,try中有异常,执行catch并将结果11返回给主线程,最后执行finally

  1. try中有返回语句
public class Demo03 {private static int test03() {int i = 0;try {System.out.println("执行try:" + i);return i;} finally {++i;System.out.println("执行finally:" + i);}}public static void main(String[] args) {System.out.println("执行main:" + test03());}
}

结果如下:

解释:因为try之前没有return,先执行try,try中有返回,将其返回给finally,最后执行finally,此时i为0,++i之后为1,最后返回主线程是try中返回的i,所以主线程中的值是0。

  1. try和finally中都有返回语句
public class Demo04 {private static int test04() {try {System.out.println("执行try");return 1;} finally {System.out.println("执行finally");return 2;}}public static void main(String[] args) {System.out.println("执行main:" + test04());}
}

结果如下:

解释:因为try之前没有return,先执行try,try中有返回,将其返回给finally,最后执行finally,finally中有返回语句,则直接将其返回给主线程,所以主线程最终值为2。

  1. try和finally中都有返回语句(对第四点的深入理解)
public class Demo05 {private static int test05() {int i = 1;try {System.out.println("执行try:" + i);i++;return i;} finally {++i;System.out.println("执行finally:" + i);return i;}}public static void main(String[] args) {System.out.println("执行main:" + test05());}
}

结果如下:

解释:在第四点的基础上自己可以解释了,就不啰嗦了


楠哥-------一心想为IT行业添砖加瓦,却总是面向cv编程的程序员。
  谢谢阅读,无误点赞,有误还望评论区指正。


关于try,finally异常。finally一定会执行吗?相关推荐

  1. java fianlly_Java冷知识:finally中的代码一定会执行吗?

    前言 Java开发中,正常情况下,在执行了try代码块之后,finally中的代码一定会执行.我们实际开发也经常会利用这个特性,在finally中来执行一些特殊的操作,比如:释放资源.释放锁等. de ...

  2. golang的defer的理解- defer的函数一定会执行吗?

    文章目录 golang的defer 什么是defer 理解defer defer什么时间执行(defer. return.返回值 三者的执行顺序) defer输出的值,就是定义时的值.而不是defer ...

  3. finally块中的代码一定会执行吗?

    为什么80%的码农都做不了架构师?>>>    在Sun Tutorial中有这样一句话:The finally block always executes when the try ...

  4. C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)

    文章目录 描述 声明 参数 返回值 实例 附加解释 背景知识:C语言中signal函数简介及使用 描述 C 库函数 void (*signal(int sig, void (*func)(int))) ...

  5. java怎么碰到异常跳过继续执行_Java异常处理很难吗?BAT大厂的架构师是怎么处理Java异常的?...

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基​zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...

  6. catch所有提示的异常类型,程序执行异常时却还是没有报错,异常没有被catch到吗[已解决]

    有时候调试程序的时候,真的是会让人心态有点崩溃,没有捕获到错误,但是程序运行出来的结果就是不对.按照我同事的话说:"我的代码有它自己的思想". 今天的情况是,在同步一个订单时,会先 ...

  7. Java语言中,finally一定会执行吗?

    简介   我们都知道,finally 作为异常处理的一部分,它只能紧跟在try/catch语句后,附带一个语句块,表示这段语句,"在正常情况下",最终一定会被执行(不管有没有抛出异 ...

  8. finally语句块一定会执行吗?

    按理说finally是一定执行的,但也不排除特例,比如说以下代码: public class SystemExitAndFinally { public static void main(String ...

  9. python强制退出进程时或是异常错误时强制执行某代码:退出处理器

    需求背景: 使用python+selenium做web自动化.脚本异常退出时,需要关闭webdriver的chrome进程,不能让他驻留.本身程序出现异常时,已经用try-except-进行异常捕捉, ...

最新文章

  1. Redis 那些故障转移、高可用方案
  2. 实战SSM_O2O商铺_13【商铺注册】View层之初始化页面数据
  3. DL:神经网络算法简介之耗算力的简介、原因、经典模型耗算力计算、GPU使用之详细攻略
  4. 一些debug常用的魔法数值
  5. 打印机打印网页不清晰_针式打印机不开机故障维修
  6. Git的安装(附安装包)
  7. Unity3D 的物理渲染和光照模型
  8. easycode 表配置_EasyCode插件使用及模板参考
  9. 硬盘、服务器、RAID磁盘阵列
  10. 洛谷 P2678 [NOIP2015提高组] 跳石头(二分答案)
  11. 2022-2028全球沉浸式投影行业调研及趋势分析报告
  12. 欧格教育:提升店铺流量的方法
  13. 人工智能是什么,机器学习就是人工智能吗?
  14. 上海配眼镜(攻略) ,个人配镜经验总结,你不了解的这里都有!
  15. iOS 並行編程初步
  16. 如何更改计算机c盘中用户名,windows10家庭版怎么更改c盘中的用户名_win10家庭版修改c盘用户名操作方法...
  17. 如何改变坏习惯,形成新习惯
  18. ECharts加载省份地图
  19. 从画面质量看国产3D网游的技术性崛起
  20. 小程序日历控件分享 按月传值显示

热门文章

  1. 优傲机器人与合作伙伴联合推出自动焊接工作站
  2. Unity 事件系统
  3. vue- style行内样式
  4. 如何分析日活跃用户异常波动
  5. python直接获得文件夹下子目录的文件名
  6. ubuntu安装pinfi及其实操记录
  7. 2个月的996模式工作结束了,该继续我的博客了
  8. 蓝桥杯比赛java试题及答案,2011蓝桥杯高职java试题及部分参考答案
  9. [架构之路-190]-《软考-系统分析师》-4-据通信与计算机网络-5-图解CRC计算方法与步骤
  10. 网络安全合规-Tisax(汽车安全评估讯息交换平台)一