问题:
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行
如果执行,那么它会在什么时候被执行,在return前还是后?
===================================================
实验1:[code=java]public class TestFinally {
public static void main (String [] args) {
String result = testFinally();
System.out.println("return = " + result);
}
public static String testFinally () {
String str = null;
try {
str = "try"; //将str的值设置为"return";
System.out.println("str = " + str); //打印str的值
return str; //返回str
} finally {
str = "finally"; //将str的值改变为"finally";
System.out.println("str = " + str); //打印str的值
}
}
}
//程序运行结果为:
str = try
str = finally
return = try[/code]结论:
1、由于finally{}中打印str的值这行代码被执行了,所以跟在return后面的finally{}里的code会执行
2、由于在finally{}中将str的值改变为了"finally",但是方法返回的值仍然是"try"
所以,finally是在return语句执行之后,才改变str的值的
所以,finally执行的时间在return后
===================================================
实验2:[code=java]public class TestFinally {
public static void main (String [] args) {
String result = testFinally();
System.out.println("return = " + result);
}
public static String testFinally () {
String str = null;
try {
str = "try"; //将str的值设置为"return";
System.out.println("str = " + str); //打印str的值
return str; //返回str
} finally {
str = "finally"; //将str的值修改为"finally";
System.out.println("str = " + str); //打印str的值
return str; //返回str(比起代码1来,代码2只多了这1行)
}
}
}
//程序运行结果为:
str = try
str = finally
return = finally[/code]结论:
由于实验2中,仅仅在finally{}中多加了1行return语句,方法的返回的值就变为了"finally"
这就说明,如果finally{}中有return语句的话,那么方法就会返回finally{}中执行return语句时返回的值
也就是说,方法最终返回的值是总是最后一个return所返回的值
===================================================
不知道以上的结论是否正确? |