MST

星途 面试题库

面试题:Java异常处理之捕获多种异常

在Java中,当一个方法可能抛出多种不同类型的异常时,如何正确地捕获并处理这些异常?请给出代码示例,说明捕获多种异常时的注意事项。
15.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

在Java中,当一个方法可能抛出多种不同类型的异常时,可以使用多个catch块来捕获不同类型的异常。以下是代码示例:

public class ExceptionHandlingExample {
    public static void main(String[] args) {
        try {
            // 可能抛出多种异常的代码
            int result = divide(10, 0);
            System.out.println("结果: " + result);
        } catch (ArithmeticException e) {
            System.out.println("捕获到算术异常: " + e.getMessage());
        } catch (NumberFormatException e) {
            System.out.println("捕获到数字格式异常: " + e.getMessage());
        }
    }

    public static int divide(int a, int b) throws ArithmeticException, NumberFormatException {
        if (b == 0) {
            throw new ArithmeticException("除数不能为零");
        }
        // 假设这里有需要将字符串转换为数字的操作,可能抛出NumberFormatException
        String numStr = "abc";
        int num = Integer.parseInt(numStr);
        return a / b;
    }
}

捕获多种异常时的注意事项:

  1. 异常顺序:捕获异常时,子类异常的catch块应该放在父类异常的catch块之前。因为如果先写父类异常的catch块,那么子类异常也会被父类异常的catch块捕获,导致子类异常的特定处理代码无法执行。例如,IOExceptionFileNotFoundException的父类,如果先写catch (IOException e),那么FileNotFoundException也会被这个catch块捕获,后续的catch (FileNotFoundException e)就永远不会执行。
  2. 具体处理:每个catch块应该对相应类型的异常进行具体的处理,根据业务需求进行日志记录、错误提示等操作,以便于调试和维护。
  3. 避免过于宽泛的捕获:尽量避免捕获过于宽泛的异常类型(如Exception),除非你真的需要统一处理所有类型的异常。过于宽泛的捕获可能会掩盖真正的问题,使得调试变得困难。应该尽可能捕获具体的异常类型,这样可以更好地针对不同异常进行处理。