读书人

try {}里有一个return语句那么紧跟在

发布时间: 2012-01-31 21:28:41 作者: rapoo

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
很多人都说是在return前执行,但我的写的测试程序确得到不同答案?有没有高手讲讲啊
public String message(){
System.out.println("returned");
return "123";
}

public String testFinal(){
try{
return message();
}catch(Exception e){
e.printStackTrace();
return "exception";
}finally{
System.out.println("do finally");
}
}

public static void main(String[] args){
Test test = new Test();
test.testFinal();
}

[解决办法]
finally是一定会执行的

只有代码中有system.exit() 这一种情况 才不会执行finally

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂
[解决办法]

探讨
finally是一定会执行的

只有代码中有system.exit() 这一种情况 才不会执行finally

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂

[解决办法]
先调用message()函数,但此时还不会return,执行finally{}完后,就只剩下return了,return执行就跳出该函数。你可以设断点,按F6
debug下,可以清楚看到。
[解决办法]
finally的代码会在return前执行.
[解决办法]
会执行

在 try 中 或 catch 中遇到 return 就会转入 finally
[解决办法]
探讨
finally是一定会执行的

只有代码中有system.exit() 这一种情况 才不会执行finally

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂

[解决办法]
先执行return,后执行finally中的代码
[解决办法]
看看这个

http://topic.csdn.net/t/20041211/20/3636856.html

理解一下什么是--------return-----------
[解决办法]
还有这个

http://blog.csdn.net/gaoyuanfeng/archive/2009/04/11/4064388.aspx
[解决办法]
先查资料,再去思考,最后再上来给出答案

请别人云亦云,误导别人
[解决办法]
public String message(){
System.out.println("returned");
return "123"; ---- 2
}

public String testFinal(){
try{
return message(); ---- 1
}catch(Exception e){
e.printStackTrace();
return "exception";
}finally{
System.out.println("do finally"); --- 3
}
}



public static void main(String[] args){
Test test = new Test();
test.testFinal();
}

感觉结果应该是:
returned
do finally



[解决办法]
根据java规范:在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终
返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是
finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。
[解决办法]
你可以断点跟踪下不就知道了
[解决办法]
Java code
public String message(){System.out.println("returned");return "123"; ----  2}public String testFinal(){try{return message();  ----  1}catch(Exception e){e.printStackTrace();return "exception";}finally{System.out.println("do finally");  ---  3}}public static void main(String[] args){Test test = new Test();test.testFinal();} 土匪说的很对  finally 确实在return 前执行  在我标注的 2  的return 前执行 


[解决办法]

Java code
    public String message() {        System.out.println("returned");        return "123";    }    public String testFinal() {        try {            return message();        } catch (Exception e) {            e.printStackTrace();            return "exception";        } finally {            System.out.println("do finally");        }    }    public static void main(String[] args) {        Test test = new Test();        [color=#FF0000]System.out.println(test.testFinal());[/color]    }
[解决办法]
楼主的代码好象有问题,你确信你的代码能成功运行吗?
[解决办法]
Java code
public class Test2 {    public static void main(String[] args) {        System.out.print("in main b = " + tt());    }    public static int tt() {        int b = 23;        try {            return b = 88;        } finally {            System.out.println("in finally b = " + b);            b = 66;            System.out.println("after being assigned, b = " + b);            return b = 44;        }    }}in finally b = 88after being assigned, b = 66in main b = 44
[解决办法]
我土了,楼主的代码没有问题。
[解决办法]
探讨
根据java规范:在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终
返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是
finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。

[解决办法]
String str = "1";
public String testFinal(){
try{
return str;
}catch(Exception e){
e.printStackTrace();
return "exception";
}finally{
str += "0";
}
}

public static void main(String[] args) {

Test test = new Test();
System.out.println(test.testFinal());
}
为什么这句str += "0";执行了,打印是1呢?
[解决办法]
刚写了点东西,
http://blog.csdn.net/ZangXT/archive/2009/05/21/4206672.aspx
自己看一下吧。
[解决办法]
探讨
根据java规范:在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终
返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是
finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。

[解决办法]
会执行 在return之前
[解决办法]
finally语句,只有一种情况不会被执行,那就是断电了
[解决办法]
finally是一定会执行的
[解决办法]
探讨
引用:
finally是一定会执行的

只有代码中有system.exit() 这一种情况 才不会执行finally

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂


楼主说到的 "finally会在return之前执行",小弟不认同,经测试过,
结果跟楼主的描述是相反的.

结论是: 如果finally之前没有执行过:System.exit(0); 则 finally 是一定执行,并且是最后执行

[解决办法]

探讨
finally是一定会执行的

只有代码中有system.exit() 这一种情况 才不会执行finally

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂


[解决办法]
探讨
finally是一定会执行的

只有代码中有system.exit() 这一种情况 才不会执行finally

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂

[解决办法]
看玩这个帖子我也明白了, 感谢楼主
[解决办法]
探讨
引用:
引用:
finally是一定会执行的

只有代码中有system.exit() 这一种情况 才不会执行finally

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂


楼主说到的 "finally会在return之前执行",小弟不认同,经测试过,
结果跟楼主的描述是相反的.

结论是: 如果finally之前没有执行过:System.exit(0); 则 finally 是一定执行,并…

[解决办法]
returned
do finally
[解决办法]
探讨
finally是一定会执行的

只有代码中有system.exit() 这一种情况 才不会执行finally

因为终止了虚拟机进程


finally会在return之前执行

如果在finally里面有return情况会更复杂

读书人网 >J2SE开发

热点推荐