try catch finally 中有多个return时,代码是这样执行的
来源:互联网 发布:淘宝网店女鞋图片 编辑:程序博客网 时间:2024/06/07 23:38
try/catch中有return,finally也有return,Sun又说了finally中的代码必须执行,
如果执行finally中的return, try/catch中的return 还执行吗?
如果所有的return都执行,执行的先后顺序是怎样,最后实际又返回了哪个return后面的值呢?
来试试:
------------------------------------------------------------------------------------------------------
public class Main {
public static void main(String... args) {
System.out.println(tcf());
}
public static int tcf(){
try{
System.out.println("try");
throw new Exception();
}
catch (Exception e) {
System.out.println("catch");
return one(); //注意one方法中的输出
}
finally{
System.out.println("finally");
return two();
}
}
public static int one(){
System.out.println("one");
return 1;
}
public static int two(){
System.out.println("two");
return 2;
}
}
-----------------------------------------------------------------------------------
就得到下面的结果
-----------------------------------------------------------------------------------
try
catch
one
finally
two
2
-----------------------------------------------------------------------------------
结论是:
先执行了return one();,然后依据语法规定又不得不执行finally block,于是又执行了return two();
如果你学过编译原理,你可以把“return one();”理解为被编译成了一下几行:
1 returnValue = one();
2 if(没有紧接着的finally语句块)
3 goto 调用本方法的地方;
4 else
5 执行finally语句块
执行了两个return 后,相当于给returnValue 赋了两次值,所以returnValue等于后一个值
那下面这段代码的返回值和输出结果是什么呢?如果你理解了我的意思,很容易得出结论
-----------------------------------------------------------------------------------
try{
try{
return one();
}finally{
return two();
}
}finally{
return three();
}
- try catch finally 中有多个return时,代码是这样执行的
- try, catch, finally, return的执行顺序
- try、catch、finally、return的执行顺序
- try、catch、finally、return的执行顺序
- try catch finally return 的执行顺序
- try、catch、finally、return的执行顺序
- try catch finally return 的执行顺序
- try catch finally return 的执行顺序
- try-catch-finally-return的执行顺序
- try、catch、finally、return的执行顺序
- try catch finally return 的执行顺序
- 有return时try catch finally的执行顺序
- try-catch-finally中throw,return时的执行顺序
- try-catch-finally中finally的break,return执行顺序
- 黑马论坛--异常中catch代码块中有return时finally是怎么执行的讨论
- 含有return 的try catch finally的执行顺序
- 含有return 的try catch finally的执行顺序
- 含有return 的try catch finally的执行顺序
- 哥终于要工作了哈。发个庆祝下
- Mysql 忘记 root 密码的几种处理方法
- Oracle trunc()函数
- HDOJ1019多个数的最小公倍数
- 每天1点执行的oracle JOB样例
- try catch finally 中有多个return时,代码是这样执行的
- 对MDI和SDI非客户区
- Makefile概述
- Cobbler写的ADO连接池
- Oracle学习笔记整理之游标篇
- 正确理解 JOB 中的 NEXT_DATE 及 INTERVAL 参数
- 怎样看懂Oracle的执行计划
- 点击事件使按钮不可用
- linux Crontab 使用