面试题答案
一键面试finally块执行情况
- 正常执行:当try块中没有发生异常时,执行完try块的所有代码后,无论try块中是否有return语句,finally块都会被执行。
- 发生异常:当try块中发生异常,且该异常被catch块捕获处理后,finally块也会被执行。即使catch块中有return语句,finally块也会在catch块的return语句执行前执行。
try块中有return语句时的执行顺序及对返回值的影响
- 执行顺序:当try块执行到return语句时,会先暂停return语句的执行,转而执行finally块中的代码,等finally块执行完毕后,再回来执行try块中暂停的return语句。
- 对返回值的影响:如果finally块中没有改变返回值的操作,那么最终返回的值就是try块中return语句所返回的值。如果finally块中改变了返回值(不推荐这种做法,会使代码逻辑变得复杂且容易出错),那么最终返回的值就是finally块中修改后的值。
示例代码
public class FinallyExample {
public static int testFinally() {
try {
return 1;
} finally {
System.out.println("finally block executed");
}
}
public static void main(String[] args) {
int result = testFinally();
System.out.println("Return value: " + result);
}
}
在上述代码中,testFinally
方法的try块中有一个return 1
语句。当执行到这个return
语句时,会先执行finally块中的代码,打印出"finally block executed",然后再执行try块中暂停的return 1
语句,最终返回1。所以在main
方法中打印出的返回值是1。