面试题答案
一键面试以下是使用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);
}
}
}
代码说明
- 自定义异常类
CustomException
:继承自Exception
,适用于业务逻辑中可恢复的异常情况。构造函数接受一个字符串消息,传递给父类的构造函数。 methodThatThrowsCustomException
方法:抛出CustomException
,然后捕获它,并将其包装到OuterException
中形成异常链。main
方法:调用methodThatThrowsCustomException
方法,并在catch
块中捕获OuterException
。通过getCause
方法获取原始异常信息,并根据异常类型进行处理。同时,通过printStackTrace
方法展示异常链的完整信息。
不同编程语言实现方式会有所不同,但整体思路类似,即自定义异常类、抛出异常并包装成异常链、在捕获异常时处理异常链并获取原始异常信息。