关于异常finally的问题
发布日期:2021-06-27 12:55:46
浏览次数:23
分类:技术文章
本文共 2349 字,大约阅读时间需要 7 分钟。
关于异常finally的问题
1、finally的执行情况
finally块的内容必定会执行,但如若软件关闭、停电等硬件情况,finally块的内容无法执行。
public class Demo5 { public static void main(String[] args) { haha(); } public static void haha(){ try{ System.out.println("1"); System.out.println("2"); System.out.println("3"); System.out.println("4"); return; }catch(Exception e){ }finally { System.out.println("锄禾日当午,汗滴禾下土"); } }}
输出:1234锄禾日当午,汗滴禾下土
finally不执行
public class Demo { public static void main(String[] args) { haha(); } public static void haha(){ try{ int a = 10; int b = 0; System.out.println(a/b); }catch(Exception e){ //退出JVM System.out.println("出现了异常"); System.exit(0); }finally { System.out.println("锄禾日当午,汗滴禾下土"); } }}
输出:出现了异常
由于程序执行
System.exit(0)
退出了JVM,因此finally语句块不执行。
2、引用类型数据和基本数据类型
引用数据类型
public class Demo { public static void main(String[] args) { Person p = haha(); System.out.println(p.age); } public static Person haha(){ Person p = new Person(); try{ p.age = 18; return p; }catch(Exception e){ return null; }finally { p.age = 28; } } static class Person{ int age; }}
输出:28
由于
Person p = new Person();
在堆内存中开辟空间,而在栈中保存的是该空间的内存地址,return p
进行备份时,备份的是该内存地址。而当finally块中修改了堆内存中的数值时,备份的内存地址是不变的,因此,输出打印的是28
.
基本数据类型
public class Demo { public static void main(String[] args) { int a = haha(); System.out.println(a); } public static int haha(){ int a = 10; try{ return a; }catch(Exception e){ return 0; }finally { a = 20; } } //静态内部类 static class Person{ int age; }}
输出:10
基本数据类型,
int a = 10;
在栈中保存的就是数值10
,当return a;
时,备份的就是数值10,而当finally
块中修改a=20
时,备份的仍然是数值10
,因此最后输出的值为10
finally执行流程:
- 先计算返回值, 并将返回值存储起来, 等待返回
- 执行finally代码块
- 将之前存储的返回值, 返回出去;
需注意:
- 返回值是在finally运算之前就确定了,并且缓存了,不管finally对该值做任何的改变,返回的值都不会改变
- finally代码中不建议包含
return
,因为程序会在上述的流程中提前退出,也就是说返回的值不是try
或catch
中的值- 如果在try或catch中停止了JVM,则finally不会执行.例如停电- -, 或通过如下代码退出JVM:
System.exit(0);
转载地址:https://blog.csdn.net/weixin_43454088/article/details/116033893 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月05日 08时02分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
建筑施工总承包资质有哪些经营范围?
2019-04-26
哪些行业领域可以申请双软认证呢?
2019-04-26
如何办理信息安全资质认证?
2019-04-26
ISO 27001信息安全管理体系认证效益及认证周期
2019-04-26
2021年高新技术企业申报流程
2019-04-26
ICP许可证和ICP备案有什么区别
2019-04-26
CCRC信息安全服务资质认证
2019-04-26
软件著作权如何做变更转让?
2019-04-26
建筑施工总承包资质办理最新攻略
2019-04-26
国家能源局:两类自备电站不要求取得发电类电力业务许可证
2019-04-26
JS实现时间与时间戳的转换方法
2019-04-26
小程序tab切换
2019-04-26
关于碰到在苹果手机上的兼容相关问题【部分】
2019-04-26
学习安装并使用NUXT一
2019-04-26
新手入门Jeecg-Boot开发环境搭建到启动
2019-04-26
JEECG学习使用登录验证码问题
2019-04-26
uni-app发布微信小程序时,微信开发者工具初始化应用通信能力界面的解决办法
2019-04-26
uniapp运行支付宝小程序运行时报错
2019-04-26
uniapp编译支付宝小程序图片图标显示问题
2019-04-26
vue中watch监听报错问题
2019-04-26