MST

星途 面试题库

面试题:Java异常处理机制中try - catch - finally的执行顺序

请阐述在Java异常处理中,try - catch - finally块的执行顺序是怎样的?若try块中有return语句,finally块还会执行吗?如果会,其执行顺序又是怎样的?
23.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 正常情况下的执行顺序
    • 程序首先进入try块执行其中的代码。
    • 如果try块中没有发生异常,那么try块执行完毕后,会跳过catch块,直接执行finally块。
  2. 异常情况下的执行顺序
    • try块中发生异常时,会立即停止执行try块中剩余的代码。
    • 然后检查catch块,寻找与抛出异常类型匹配的catch块,如果找到,则执行该catch块中的代码,执行完毕后再执行finally块。
    • 如果没有找到匹配的catch块,异常会继续向上层调用栈抛出,若最终都没有合适的catch块处理异常,程序会终止,但finally块依然会在异常向上抛出前执行(除非在trycatch块中执行了System.exit()等导致JVM退出的操作)。
  3. try块中有return语句
    • finally块仍然会执行。
    • 执行顺序为:当执行到try块中的return语句时,会先将返回值暂存起来(如果有返回值)。
    • 然后执行finally块中的代码。
    • 最后再返回之前暂存的返回值。例如:
public class Test {
    public static int test() {
        try {
            return 1;
        } finally {
            System.out.println("finally block");
        }
    }
    public static void main(String[] args) {
        System.out.println(test());
    }
}

在上述代码中,会先输出finally block,然后再返回1