在 Java 中, try-catch-finally 语句块的执行顺序如下:
1. 首先执行 try 代码块中的语句。如果在 try 代码块中没有发生异常, try 代码块中的代码会正常执行完毕,接着会执行 finally 代码块中的代码。 finally 代码块无论如何都会执行(一些特殊情况如调用 System.exit() 除外)。
2. 如果在 try 代码块中发生了异常,程序会立即停止执行 try 代码块中剩余的代码,然后去匹配 catch 代码块。如果有匹配的 catch 代码块(即 catch 代码块捕获的异常类型与实际抛出的异常类型一致或者是其超类),则执行该 catch 代码块中的代码。执行完 catch 代码块后,无论 catch 代码块中是否有 return 语句,都会接着执行 finally 代码块中的代码。
3. 如果在 try 代码块中发生了异常,且没有匹配的 catch 代码块,那么异常会继续向外层抛出。在异常抛出之前, finally 代码块仍然会被执行。
下面是一个示例代码:
java
public class TryCatchFinallyExample {
public static int test() {
try {
System.out.println("try block");
return 1;
} catch (Exception e) {
System.out.println("catch block");
return 2;
} finally {
System.out.println("finally block");
}
}
public static void main(String[] args) {
int result = test();
System.out.println("result: " + result);
}
}
在上述代码的 test 方法中, try 代码块中有一个 return 语句,但是在 return 之前会先执行 finally 代码块。因此,程序的输出是:
plaintext
try block
finally block
result: 1