代码来源于课件,问题是——
“这段代码输出结果是什么?”
class Indecisive {
public static void main(String[] args) {
System.out.println(decision());
}
static boolean decision() {
try {
return true;
} finally {
return false;
}
}
}
可能很多人和我直觉一样,觉得是输出true,即decision方法的代码遇到第一个return就真的返回而不再继续往下执行了。其实不然。最终结果是输出:
false
解释如下:
因为在try-finally
语句块中,finally
块中的return
语句会覆盖try
块中的return
语句,无论try
块中返回什么值,最终都会被finally
块中的return
语句覆盖。因此,在执行decision()
方法时,程序会先执行try
块中的return true;
语句,随后执行finally
块中的return false;
语句,最终返回false
。
因为finally
块中的语句一定会被执行(除非程序在try
块内出现了错误导致程序异常退出)。
所以在使用try-finally
语句块时需要注意,避免出现不必要的异常或逻辑错误。