MST

星途 面试题库

面试题:Java自定义异常在多层调用中的处理与传播

假设有一个Java项目,存在多层方法调用。在底层方法中抛出一个自定义异常,描述一下如何在中间层和顶层方法中正确处理和传播这个自定义异常,使得上层调用者能够准确获取异常信息并进行相应处理。同时说明在传播过程中,异常堆栈信息的维护和作用。
13.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 中间层方法处理和传播异常
    • 在中间层方法中,可以使用try - catch块捕获底层方法抛出的自定义异常。如果中间层无法处理该异常,可以再次抛出,以便上层方法处理。例如:
    public class MiddleLayer {
        public void middleMethod() {
            try {
                // 调用底层方法
                new LowerLayer().lowerMethod();
            } catch (CustomException e) {
                // 可以在这里记录日志等操作
                System.out.println("中间层捕获到自定义异常,准备重新抛出");
                throw e;
            }
        }
    }
    
  2. 顶层方法处理异常
    • 在顶层方法中,使用try - catch块捕获从中间层传播上来的自定义异常,并进行相应处理。例如:
    public class TopLayer {
        public static void main(String[] args) {
            try {
                new MiddleLayer().middleMethod();
            } catch (CustomException e) {
                System.out.println("顶层捕获到自定义异常,异常信息:" + e.getMessage());
                e.printStackTrace();// 打印异常堆栈信息
            }
        }
    }
    
  3. 异常堆栈信息的维护和作用
    • 维护:在Java中,异常对象在抛出和传播过程中,会自动维护异常堆栈信息。每次捕获并重新抛出异常时,异常对象的堆栈信息不会丢失。例如,在上述中间层捕获并重新抛出异常时,throw e会将带有原始堆栈信息的异常对象继续向上传递。
    • 作用:异常堆栈信息记录了异常发生的完整调用链,从异常最初抛出的方法,一直到最终捕获异常的方法。顶层调用者通过打印异常堆栈信息(如e.printStackTrace()),可以了解异常发生的具体位置,包括类名、方法名、行数等信息,有助于快速定位和排查问题。例如,如果底层方法lowerMethod在第10行抛出异常,通过异常堆栈信息,开发人员可以直接定位到LowerLayer类的lowerMethod方法的第10行代码处。