锁定老帖子 主题:一段诡异的代码
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-17
今天在网上看到这段代码,着实让人晕头转向。如下: public class Test { public static void main(String[] args) { System.out.println(test()); } public static String test() { try { System.out.println("try block"); return test1(); } finally { System.out.println("finally block"); } } public static String test1() { System.out.println("return statement"); return "after return"; } }经过运行,结果是: try block
return statement
finally block
after return
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-17
哎,初学者的问题都没有人回啊。
我来帮你一下吧。言简意赅: 1.finally块是一定会执行的。【这个你应该知道,不知道的话去面壁】 2.如果try block里面有return,finally block总会在return之前执行。【你可以类似理解(注意是类似!类似!)为把finally block拷贝到了try block中的每个return之前】 3.如果try block里面有return;而且执行到这一行了;而finally block中TMD也有return语句.....那么,finally里面的return会被无视。 |
|
返回顶楼 | |
发表时间:2011-07-17
哎!又见此题啊。。
|
|
返回顶楼 | |
发表时间:2011-07-18
路过,不解释,你该懂了
|
|
返回顶楼 | |
发表时间:2011-07-18
非常不诡异, 你在finally里面再加个return 才叫蛋疼。。。
现在这样 你把 return test1() 改成2行就理解了。。 String str=test1(); return str; |
|
返回顶楼 | |
发表时间:2011-07-18
最后修改:2011-07-18
刚刚有错,,是临时变量存储try block的return值
|
|
返回顶楼 | |
发表时间:2011-07-18
路过.....楼主刚开始学java吧
|
|
返回顶楼 | |
发表时间:2011-07-18
isaac.198 写道 哎,初学者的问题都没有人回啊。
我来帮你一下吧。言简意赅: 1.finally块是一定会执行的。【这个你应该知道,不知道的话去面壁】 2.如果try block里面有return,finally block总会在return之前执行。【你可以类似理解(注意是类似!类似!)为把finally block拷贝到了try block中的每个return之前】 3.如果try block里面有return;而且执行到这一行了;而finally block中TMD也有return语句.....那么,finally里面的return会被无视。 第3条: 应该是 如果try block里面有return;而且执行到这一行了;而finally block中TMD也有return语句.....那么,【try block 】里面的return会被无视。 |
|
返回顶楼 | |
发表时间:2011-07-18
改写下,return没有执行,不能认为test1()都不执行。
public static String test() { try { System.out.println("try block"); String s = test1(); return s; } finally { System.out.println("finally block"); } } |
|
返回顶楼 | |
发表时间:2011-07-18
楼主可参考
关于 Java 中 finally 语句块的深度辨析 http://www.ibm.com/developerworks/cn/java/j-lo-finally/ |
|
返回顶楼 | |