论坛首页 入门技术论坛

一段诡异的代码

浏览 9008 次
该帖已经被评为新手帖
作者 正文
   发表时间: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
   发表时间: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会被无视。
1 请登录后投票
   发表时间:2011-07-17  
哎!又见此题啊。。
0 请登录后投票
   发表时间:2011-07-18  
路过,不解释,你该懂了
0 请登录后投票
   发表时间:2011-07-18  
非常不诡异, 你在finally里面再加个return 才叫蛋疼。。。
现在这样 你把 return test1() 改成2行就理解了。。
String str=test1();
return str;
0 请登录后投票
   发表时间:2011-07-18   最后修改:2011-07-18
刚刚有错,,是临时变量存储try block的return值
0 请登录后投票
   发表时间:2011-07-18  
路过.....楼主刚开始学java吧
0 请登录后投票
   发表时间: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会被无视。
1 请登录后投票
   发表时间: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"); 
        } 
    } 
0 请登录后投票
   发表时间:2011-07-18  
楼主可参考
关于 Java 中 finally 语句块的深度辨析
http://www.ibm.com/developerworks/cn/java/j-lo-finally/
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics