MST

星途 面试题库

面试题:Java中异常处理关键字try - catch - finally的执行顺序

在Java中,描述一下try - catch - finally块在不同情况下(例如try块中无异常、try块中有异常被catch捕获、try块中有异常未被catch捕获等)的执行顺序,并举例说明。
31.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. try块中无异常
    • 执行顺序:先执行try块中的代码,然后执行finally块中的代码(如果有finally块),最后执行try - catch - finally块之后的代码。
    • 示例代码
public class TryCatchFinallyExample {
    public static void main(String[] args) {
        try {
            System.out.println("Try block executed.");
        } finally {
            System.out.println("Finally block executed.");
        }
        System.out.println("Code after try - catch - finally block.");
    }
}
  • 输出结果
Try block executed.
Finally block executed.
Code after try - catch - finally block.
  1. try块中有异常被catch捕获
    • 执行顺序:先执行try块中的代码,当异常发生时,try块中剩余未执行的代码将被跳过,然后执行与之匹配的catch块中的代码,最后执行finally块中的代码(如果有finally块),再执行try - catch - finally块之后的代码。
    • 示例代码
public class TryCatchFinallyExample {
    public static void main(String[] args) {
        try {
            int num = 10 / 0;
            System.out.println("This line won't be printed.");
        } catch (ArithmeticException e) {
            System.out.println("Caught ArithmeticException: " + e.getMessage());
        } finally {
            System.out.println("Finally block executed.");
        }
        System.out.println("Code after try - catch - finally block.");
    }
}
  • 输出结果
Caught ArithmeticException: / by zero
Finally block executed.
Code after try - catch - finally block.
  1. try块中有异常未被catch捕获
    • 执行顺序:先执行try块中的代码,当异常发生时,try块中剩余未执行的代码将被跳过,由于没有匹配的catch块,异常将向上抛出(如果是在main方法中,程序将终止),但在异常抛出前会执行finally块中的代码(如果有finally块)。
    • 示例代码
public class TryCatchFinallyExample {
    public static void main(String[] args) {
        try {
            int[] arr = new int[5];
            System.out.println(arr[10]);
        } finally {
            System.out.println("Finally block executed.");
        }
        System.out.println("This line won't be printed.");
    }
}
  • 输出结果
Finally block executed.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 5
	at TryCatchFinallyExample.main(TryCatchFinallyExample.java:6)