关于try,finally中return的顺序
来源:互联网 发布:java导出文件到桌面 编辑:程序博客网 时间:2024/05/29 11:33
在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家各有各的说法,刚好今天有个朋友问了我这个问题,下面我就提供两段代码,详细解释一下~
这是第一种情况:try代码块中包含return语句,finally代码块中不包含return语句;
java代码如下:
package Exception;public class Test02 {public static void main(String[] args) {System.out.println(test());}public static int test(){try{int i=1;return i;}finally{int i=2;System.out.println(i);}}}
这里我们在try代码块中定义了 i=1; 并设定了return的返回值为i;
在finally代码块中为设置返回值,但同样的输出了i;
结果为
Java代码:
21
结果显示:finally代码块里如果没有return,finally代码块会优先在try代码块里的return前执行;
第二种情况是:try代码块和finally代码块中都有return语句
这也是我们需要重点讨论的地方;
java代码如下:
package Exception;public class Test01 {public static void main(String[] args) {System.out.println(test());}public static int test(){try{int i = 1;return i; }finally{int j = 2;return j;}}}这次我在try语句块和finally语句块中都加入了return语句,猜猜会输出什么结果?i = 1?还是 i = 2 ?
还是让程序告诉我们答案吧!
java代码如下:
2
有的小伙伴就说了,肯定会输出2啊!程序里有try-catch结构时,代码块里如果有finally代码块,无论如何都会执行finally代码块,上面这段代码
finally代码块里有一个return,在执行finally的return方法时,程序的结果就返回了。所以主程序输出的是2。
恭喜这位小伙伴~你答对了结果~ 但程序的运行过程不是这样的哦。
讲解如下:
主程序在调用test方法的时候会先执行try代码块里的代码,并先return i=1;但并不会直接把return的结果返回给主函数,而是在暂时储存在栈空间里;
口说无凭!那就让神奇的debug看告诉我们事实,在MyEclipse中用debug进行调试会发现,程序会先执行try代码块里的i=1;此时紧接着会马上return i=1; 事实见下图。
然后再执行finally代码块中的 代码, int j = 2; return j ; 此时执行完finally代码块的return j ; 后 ,程序就结束了,并不会再去执行返回try代码块中在栈空间里存储的 i=1;
栈空间里的 i = 1 ; 随着程序的结束 也就自动消失了~
这两个例子的结论就是:
1.如果try代码块里有return语句,而finally代码块里没有return语句,程序会先执行finally代码块里的代码然后再执行try代码块里的return语句;
2.如果try代码块和finally代码块里都有return语句,try代码块里的return语句会优先finally代码块里的return语句执行,但不会把返回的结果返回给主函数,
而是会把finally代码块里return的结果返回给主函数。
资历尚浅,如有疏漏之处欢迎指出~
但是是的s地方
- 关于try,finally中return的顺序
- 关于Java中try-catch-finally-return的执行顺序
- 关于Java中try-catch-finally-return的执行顺序
- 关于Java中try-catch-finally-return的执行顺序
- 关于try、catch、finally中return的执行顺序
- try-catch-finally中finally的break,return执行顺序
- 关于try\return\finally的执行顺序问题
- 关于try-catch-finally-return语句的执行顺序
- 关于Java中try finally return语句的执行顺序分析
- 关于Java中try finally return语句的执行顺序分析
- try{}catch{}finally{}中加入return后的执行顺序
- java中try catch finally与return的执行顺序
- try..catch..finally中包含return的执行顺序
- try-catch-finally中return的执行顺序
- Java中try-catch-finally-return的执行顺序
- try catch finally中return的 执行顺序问题
- try、catch、finally中return的执行顺序
- Java中try-catch-finally-return的执行顺序
- 来淄博旅游
- 【HDU】-4006-The kth great number(优先队列,好)
- 3.不使用(a+b)/2这种方式,求两个数的平均值。
- Dropot理解
- 理解二叉查找树
- 关于try,finally中return的顺序
- 关于OOP中集合的理解
- Matlab查找当前目录及子目录下所有文件
- editText设置背景后,被软键盘覆盖
- Linux下统计当前文件夹下的文件个数、目录个数
- HDU-1686 Oulipo(kmp模板题)
- caffe中的layers
- hdu 3842 Machine Works
- AsyncTask的用法