try{} 里有一个 return 语句,那么紧跟在这个 try 后的 finally{} 里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
在 Java 中,try
块中的 return
语句会导致方法提前返回,但 finally
块中的代码仍然会被执行。无论 try
块中是否有 return
语句,finally
块中的代码都会在 try
块执行完毕后执行,且在返回值被返回之前执行。
try
块中的代码。try
块中有 return
语句,Java 会先记录下要返回的值。finally
块中的代码。下面是一个简单的示例,演示了 try
、catch
和 finally
的执行顺序:
public class FinallyExample {
public static void main(String[] args) {
System.out.println("Returned value: " + testReturn());
}
public static int testReturn() {
int result = 0;
try {
result = 1;
return result; // 这里会记录返回值
} finally {
result = 2; // 这里会被执行
System.out.println("Finally block executed, result is now: " + result);
}
}
}
运行上述代码,输出将会是:
Finally block executed, result is now: 2
Returned value: 1
try
块中,result
被设置为 1
,并且 return result;
语句会记录这个值。finally
块被执行,result
被修改为 2
,并打印出相应的信息。result
在 finally
块中被修改,但方法仍然返回 1
,因为 return
语句在 finally
执行之前已经记录了返回值。finally
块中的代码总是会被执行,无论 try
块中是否发生异常或是否有 return
语句。finally
块在 try
块的 return
语句之后执行,但在返回值被实际返回之前执行。