try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally{}里的代码会不会被执行,什么时候被执行,在 return 前还是后?
时间: 2024-04-16 15:25:29 浏览: 55
在一个 try-catch-finally 块中,无论是否有 return 语句,finally{}里的代码都会被执行。finally 块中的代码在以下情况下会被执行:
1. 当 try 块中的代码正常执行完毕时,即没有抛出异常并且没有在 try 块中使用 return 语句,finally{}中的代码会在 try 块执行完后被执行。
2. 当 try 块中的代码抛出异常,并且该异常被 catch 块捕获处理时,finally{}中的代码会在 catch 块执行完后被执行。
3. 当 try 块中的代码抛出异常,但没有找到匹配的 catch 块来处理该异常时,finally{}中的代码会在异常向上抛出前被执行。
无论是在 return 语句之前还是之后,finally{}中的代码都会被执行。如果在 finally{}中有 return 语句,它会覆盖之前的返回值,将新的返回值返回。但是,建议不要在 finally{}块中使用 return 语句,以免引发意外结果或混淆代码逻辑。
相关问题
try{ }里有一个return语句,那么紧跟在这个try后的finally{ }里的代码会不会被执行,什么时候被执行?
如果 `try` 块中有 `return` 语句,则在执行 `return` 之前,将会先执行 `finally` 语句块中的代码,然后执行 `return` 语句。这意味着,无论 `try` 块中是否有异常,`finally` 块中的代码都将被执行,以确保资源被正确释放。
下面是一个示例代码:
```java
public static int test() {
try {
return 1;
} finally {
System.out.println("finally block is executed.");
}
}
```
在上面的示例中,`test()` 方法中的 `try` 块中有一个 `return` 语句,但是在执行 `return` 语句之前,`finally` 块中的代码会被执行。因此,当调用 `test()` 方法时,将会输出 "finally block is executed." 字符串,然后返回值 1。
需要注意的是,如果在 `finally` 块中也有 `return` 语句,则它将会覆盖 `try` 块中的 `return` 语句。这意味着,无论 `try` 块中的代码是否有异常,`finally` 块中的 `return` 语句将会被执行,并且会覆盖 `try` 块中的 `return` 语句。因此,建议在 `finally` 块中不要使用 `return` 语句,而是使用其他的方式来确保资源的正确释放。
try #里有一个return 语句,那么紧跟在这个ty 后的finally 里的code 会在什么时候执行?
在Java中,无论try代码块中是否有return语句,finally块中的代码都会在以下情况下执行:
1. 当try代码块中的代码执行完成后,无论是否抛出异常;
2. 当try代码块中抛出了一个异常,而且该异常被catch代码块捕获并处理后;
3. 当try代码块中抛出了一个异常,但没有被任何catch代码块捕获,该异常会在finally代码块执行后被抛出。
总之,finally块中的代码总是会在try代码块中的代码执行完成后被执行,无论try代码块中是否有return语句。如果存在finally块,那么它提供了一个机会来释放资源、关闭文件或者执行任何必要的清理操作。