MST

星途 面试题库

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

请编写一个Java自定义异常类,该异常类需要继承自特定的异常基类(如RuntimeException或Exception),并带有自定义的错误信息。同时,阐述在何种场景下会使用到异常链(将一个异常包装在另一个异常中抛出),并举例说明如何在代码中实现异常链。
32.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

自定义异常类

public class MyCustomException extends RuntimeException {
    public MyCustomException(String message) {
        super(message);
    }
}

异常链使用场景

异常链通常在如下场景使用:

  1. 抽象层次转换:在底层代码捕获到一个具体的异常,但高层代码需要以更抽象的方式处理异常。例如,底层数据库操作抛出SQLException,而高层业务逻辑层更关心业务异常,此时可以将SQLException包装在自定义的业务异常中抛出,这样高层代码无需了解具体的数据库异常细节。
  2. 隐藏敏感信息:底层异常可能包含敏感信息,如数据库用户名密码等。通过异常链,可以将底层异常包装在自定义异常中,在抛出时隐藏敏感信息。

异常链代码实现示例

public class ExceptionChainExample {
    public static void main(String[] args) {
        try {
            performDatabaseOperation();
        } catch (MyBusinessException e) {
            e.printStackTrace();
        }
    }

    private static void performDatabaseOperation() throws MyBusinessException {
        try {
            // 模拟数据库操作抛出SQLException
            throw new java.sql.SQLException("Database operation failed");
        } catch (SQLException e) {
            // 将SQLException包装在自定义业务异常中抛出
            throw new MyBusinessException("Business operation failed due to database issue", e);
        }
    }
}

class MyBusinessException extends RuntimeException {
    public MyBusinessException(String message, Throwable cause) {
        super(message, cause);
    }
}