插件窝 干货文章 try catch finally的执行顺序是什么

try catch finally的执行顺序是什么

finally catch 异常 try 249    来源:    2025-03-16

在编程中,try-catch-finally 是一种异常处理机制,用于捕获和处理代码中可能发生的异常。它的执行顺序如下:

  1. try 块:首先执行 try 块中的代码。如果 try 块中的代码没有抛出异常,那么 catch 块将被跳过,直接执行 finally 块。

  2. catch 块:如果在 try 块中抛出了异常,程序会立即跳转到与异常类型匹配的 catch 块中执行。catch 块用于捕获并处理异常。如果没有匹配的 catch 块,异常会继续向上抛出,直到被捕获或导致程序终止。

  3. finally 块:无论 try 块中的代码是否抛出异常,finally 块中的代码都会被执行。finally 块通常用于释放资源或执行清理操作。

执行顺序总结:

  • 如果 try 块中没有异常:try -> finally
  • 如果 try 块中有异常:try -> catch -> finally

示例代码:

try {
    // 尝试执行的代码
    System.out.println("Try block");
    int result = 10 / 0; // 这里会抛出 ArithmeticException
} catch (ArithmeticException e) {
    // 捕获并处理异常
    System.out.println("Catch block: " + e.getMessage());
} finally {
    // 无论是否发生异常,都会执行的代码
    System.out.println("Finally block");
}

输出结果:

Try block
Catch block: / by zero
Finally block

注意事项:

  • 如果在 trycatch 块中有 return 语句,finally 块仍然会在 return 之前执行。
  • 如果在 finally 块中有 return 语句,它会覆盖 trycatch 块中的 return 语句。

示例:

public class Example {
    public static void main(String[] args) {
        System.out.println(test());
    }

    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");
            return 3;
        }
    }
}

输出结果:

Try block
Finally block
3

在这个例子中,尽管 try 块中有 return 1;,但 finally 块中的 return 3; 会覆盖它,最终返回的是 3