try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?解决方法
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在retur
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 codepublic 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 codepublic 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情况会更复杂