MST

星途 面试题库

面试题:Java异常处理:自定义异常与异常链

请实现一个自定义异常类,该异常类继承自Exception或RuntimeException(说明选择的理由)。在一个方法中,抛出这个自定义异常,并将其包装到另一个异常中形成异常链,展示如何在捕获异常时正确地获取原始异常信息以及异常链的处理机制。
11.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

以下是使用Java语言实现该需求的示例代码:

自定义异常类

// 选择继承自Exception,因为Exception用于表示可恢复的异常情况,适合业务逻辑中特定条件触发的异常
class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

抛出异常并包装成异常链

public class ExceptionChainExample {
    public static void main(String[] args) {
        try {
            methodThatThrowsCustomException();
        } catch (OuterException e) {
            // 获取原始异常信息
            Throwable cause = e.getCause();
            if (cause instanceof CustomException) {
                System.out.println("捕获到自定义异常: " + cause.getMessage());
            }
            // 处理异常链
            e.printStackTrace();
        }
    }

    public static void methodThatThrowsCustomException() throws OuterException {
        try {
            throw new CustomException("这是一个自定义异常");
        } catch (CustomException e) {
            throw new OuterException("包装自定义异常形成异常链", e);
        }
    }

    static class OuterException extends Exception {
        public OuterException(String message, Throwable cause) {
            super(message, cause);
        }
    }
}

代码说明

  1. 自定义异常类 CustomException:继承自 Exception,适用于业务逻辑中可恢复的异常情况。构造函数接受一个字符串消息,传递给父类的构造函数。
  2. methodThatThrowsCustomException 方法:抛出 CustomException,然后捕获它,并将其包装到 OuterException 中形成异常链。
  3. main 方法:调用 methodThatThrowsCustomException 方法,并在 catch 块中捕获 OuterException。通过 getCause 方法获取原始异常信息,并根据异常类型进行处理。同时,通过 printStackTrace 方法展示异常链的完整信息。

不同编程语言实现方式会有所不同,但整体思路类似,即自定义异常类、抛出异常并包装成异常链、在捕获异常时处理异常链并获取原始异常信息。