关于try,finally异常。finally一定会执行吗?
关于try,finally。finally一定会执行吗?
答案肯定不是。
先看一下结论:
(1)当出现在try之前就有结果返回,也就是有return时,则不会往下执行。
(2)当try之中出现异常时,会执行catch语句,然后是finally;当try中有return时,会将结果返回给finally,然后看finally中是否还有返回语句,如果有则将finally中的结果返回,finally中没有返回语句则将try中的返回语句返回。
进入正文
以案例来说明:
- 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也不会执行。
- 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
- 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。
- 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。
- 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一定会执行吗?相关推荐
- java fianlly_Java冷知识:finally中的代码一定会执行吗?
前言 Java开发中,正常情况下,在执行了try代码块之后,finally中的代码一定会执行.我们实际开发也经常会利用这个特性,在finally中来执行一些特殊的操作,比如:释放资源.释放锁等. de ...
- golang的defer的理解- defer的函数一定会执行吗?
文章目录 golang的defer 什么是defer 理解defer defer什么时间执行(defer. return.返回值 三者的执行顺序) defer输出的值,就是定义时的值.而不是defer ...
- finally块中的代码一定会执行吗?
为什么80%的码农都做不了架构师?>>> 在Sun Tutorial中有这样一句话:The finally block always executes when the try ...
- C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)
文章目录 描述 声明 参数 返回值 实例 附加解释 背景知识:C语言中signal函数简介及使用 描述 C 库函数 void (*signal(int sig, void (*func)(int))) ...
- java怎么碰到异常跳过继续执行_Java异常处理很难吗?BAT大厂的架构师是怎么处理Java异常的?...
欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...
- catch所有提示的异常类型,程序执行异常时却还是没有报错,异常没有被catch到吗[已解决]
有时候调试程序的时候,真的是会让人心态有点崩溃,没有捕获到错误,但是程序运行出来的结果就是不对.按照我同事的话说:"我的代码有它自己的思想". 今天的情况是,在同步一个订单时,会先 ...
- Java语言中,finally一定会执行吗?
简介 我们都知道,finally 作为异常处理的一部分,它只能紧跟在try/catch语句后,附带一个语句块,表示这段语句,"在正常情况下",最终一定会被执行(不管有没有抛出异 ...
- finally语句块一定会执行吗?
按理说finally是一定执行的,但也不排除特例,比如说以下代码: public class SystemExitAndFinally { public static void main(String ...
- python强制退出进程时或是异常错误时强制执行某代码:退出处理器
需求背景: 使用python+selenium做web自动化.脚本异常退出时,需要关闭webdriver的chrome进程,不能让他驻留.本身程序出现异常时,已经用try-except-进行异常捕捉, ...
最新文章
- Redis 那些故障转移、高可用方案
- 实战SSM_O2O商铺_13【商铺注册】View层之初始化页面数据
- DL:神经网络算法简介之耗算力的简介、原因、经典模型耗算力计算、GPU使用之详细攻略
- 一些debug常用的魔法数值
- 打印机打印网页不清晰_针式打印机不开机故障维修
- Git的安装(附安装包)
- Unity3D 的物理渲染和光照模型
- easycode 表配置_EasyCode插件使用及模板参考
- 硬盘、服务器、RAID磁盘阵列
- 洛谷 P2678 [NOIP2015提高组] 跳石头(二分答案)
- 2022-2028全球沉浸式投影行业调研及趋势分析报告
- 欧格教育:提升店铺流量的方法
- 人工智能是什么,机器学习就是人工智能吗?
- 上海配眼镜(攻略) ,个人配镜经验总结,你不了解的这里都有!
- iOS 並行編程初步
- 如何更改计算机c盘中用户名,windows10家庭版怎么更改c盘中的用户名_win10家庭版修改c盘用户名操作方法...
- 如何改变坏习惯,形成新习惯
- ECharts加载省份地图
- 从画面质量看国产3D网游的技术性崛起
- 小程序日历控件分享 按月传值显示