关于finally是在return前还是后执行的一个测试
2009-04-15 16:49
531 查看
public class T{ private String expTest(){ try{ throw new Exception("Exception Test"); }catch(Exception e){ System.out.println(e.getMessage()); return "end catch.."; }finally{ System.out.println("finally block.."); return "end finally..";//这句注释的话,就执行catch里的return } } public static void main(String args[]){ T t=new T(); System.out.println(t.expTest()); } }
事实证明,是在return前执行了finally语句块,所以清华出版的那书错了~~
2014-3-5 11:04:50 补充
public class Test3 extends Date { public String tryFinally() { // int x = 1; StringBuffer buf = new StringBuffer(); try { System.out.println("try"); // return x; buf.append("try"); return buf.toString(); } catch (Exception e) { System.out.println("catch"); // return x; buf.append("catch"); return buf.toString(); } finally { System.out.println("finally"); // ++x; buf.append("finally"); // return buf.toString(); } } public String tryFinally2() { try{ throw new Exception("Exception Test"); }catch(Exception e){ System.out.println(e.getMessage()); return "end catch.."; }finally{ System.out.println("finally block.."); return "end finally..";//这句注释的话,就执行catch里的return } } public static void main(String[] args) { Test3 test = new Test3(); System.out.println("tryFinally: " + test.tryFinally()); System.out.println("tryFinally2: " + test.tryFinally2()); } }
结果
try
finally
tryFinally: try
Exception Test
finally block..
tryFinally2: end finally..
finally语句块一定会执行,且在return前。而try或catch语句块中的return语句运行结果,似乎存储一个在函数return结果的快照中,后面执行的finally语句块(非return语句)的执行不会影响这个结果快照。但是如果finally语句有return语句时,return结果快照则被finally语句块中的return语句执行结果更新,从而函数返回结果又以finally语句块的return语句执行结果为准。ok,没想到5年后又搞懂了些。
相关文章推荐
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code 会不会被执行,什么时候被执行,在return前还是后?
- 关于java中finally中的语句在return前还是后执行的个人理解。
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- ry {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 答案是:会执行 try{}中的return执行后
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?