日期:2014-05-20  浏览次数:20897 次

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 前执行