try catch finally执行顺序 (return / 变量覆盖)
2024-09-01 15:51:06
finally有return 始终返回finally中的return 抛弃 try 与catch中的return
情况1:try{} catch(){}finally{} return x;
try{} catch(){}finally{} return x;
1 -> 2 -> 3 -> 4
情况2:try{ return x; }catch(){} finally{} return y;
try{ return x; }catch(){} finally{} return y;
try -> x计算[临时栈存]->finally ->return x的结果
情况3:try{ } catch(){return x;} finally{} return y;
try -> catch ->异常catch住 -> x计算[临时栈存]-> finally -> return x的结果;
无异常 -> finally -> return y;
情况4:try{ return x; }catch(){} finally{return y;}
try -> x计算[临时栈存] ->finally ->return y
情况5:try{} catch(){return x;}finally{return y;}
try -> catch捕获 -> x计算[临时栈存] ->finally ->return y
情况6:try{ return x;}catch(){return z;} finally{return y;}
try->x计算[临时栈存]->异常catch捕获-> z计算[临时栈存]->finally->return y;
无异常 -> finally -> return y;
eg1:finally无返回
int x = 1; try{x++; return x;} finally{++x;}
x = 2 ;
x计算后的值不会被finally改变
进入finally会提前栈保存return x 计算的值
try x:
2
finally x:3
return x :2
== try x:2
eg2:finally带返回
int x = 1; try{x++; return x;} finally{++x; return x;}
x = 3 ;
x计算后的值不会被finally改变
进入finally会提前栈保存return x 计算的值
但是直接返回finally计算完成已经被影响的x值
try x:
2
finally x:3
return x :3
== finally x:3
最新文章
- springMVC接受JSON异常
- Navicat for Oracle实现连接Oracle
- Android源码学习之模板方法模式应用
- Hibernate学习笔记整理系列-------一、Hibernate简介
- Sum Root to Leaf Numbers
- c++ 孟岩推荐 书籍
- 机器学习算法与Python实践之(三)支持向量机(SVM)进阶
- 上海Uber优步司机奖励政策(1月18日~1月24日)
- Strategic game(POJ 1463 树形DP)
- 解决浏览器兼容问题的css hack
- 每天一个linux命令(50)--date命令
- Openstack新建云主机的流程
- Oracle-03:关系型数据库和非关系的数据库的各自优缺点与区别
- Active Directory 域服务安装与测试
- asp.net core系列 32 EF查询数据 必备知识(1)
- 前后端分离djangorestframework——ContentType组件表
- MD 的常用语法格式
- centos 7 rabbitmq 3.7.12 erlang 20.3源码安装
- OCM_第二天课程:Section1 —》配置 Oracle 网络环境
- linux计划任务防暴力破解脚本+免密操作