面试题答案
一键面试在Java中,当方法A调用方法B,方法B调用方法C,且方法C可能抛出特定异常时,我们可以通过以下步骤确保异常信息的完整性并合理处理不同层次的异常包装:
- 捕获异常:在方法A中捕获方法C抛出的异常。
- 构建异常链:使用带
Throwable
参数的构造函数将原始异常包装到新的异常中,从而构建异常链。 - 传递异常:将包装后的异常抛给上层调用者。
以下是代码示例:
class CustomException extends Exception {
public CustomException(String message, Throwable cause) {
super(message, cause);
}
}
class MethodC {
public static void methodC() throws Exception {
// 模拟可能抛出异常的操作
throw new Exception("这是方法C抛出的异常");
}
}
class MethodB {
public static void methodB() throws Exception {
try {
MethodC.methodC();
} catch (Exception e) {
// 包装异常
throw new Exception("方法B捕获并包装了方法C的异常", e);
}
}
}
class MethodA {
public static void methodA() throws CustomException {
try {
MethodB.methodB();
} catch (Exception e) {
// 捕获并构建异常链
throw new CustomException("方法A捕获并包装了方法B的异常", e);
}
}
}
public class ExceptionChainingExample {
public static void main(String[] args) {
try {
MethodA.methodA();
} catch (CustomException e) {
// 打印异常信息,包含完整的异常链
e.printStackTrace();
}
}
}
在上述代码中:
MethodC
抛出一个普通的Exception
。MethodB
捕获MethodC
的异常,并将其包装在一个新的Exception
中,构建了初步的异常链。MethodA
捕获MethodB
抛出的异常,并将其包装在自定义的CustomException
中,进一步完善异常链。- 在
main
方法中,捕获MethodA
抛出的CustomException
并打印堆栈跟踪信息,确保异常信息的完整性。