首页 > 解决方案 > 超过 2 层深度的嵌套方法中的异常处理

问题描述

假设我们有嵌套方法 A、B 和 C,如下所示:

public void A(){
    try{
        B();
    }
    catch(Exception e){
        log.error(e);
    }
}

public void B(){
    C();
}

public void C(){
    try{
        some_stuff();
    }
    catch(Exception e){
        log.error(e)
    }
}

由于我在 C() 捕获异常并仅使用日志记录处理它,并且在 B() 中没有任何捕获,我是否在 A() 捕获异常?

或者我应该在 C() 处抛出异常并在 B() 处添加一个 try catch 以便能够在 A() 中处理它?

标签: javaexception

解决方案


当你这样做

public void C(){
    try{
        some_stuff();
    }
    catch(Exception e){
        log.error(e)
    }
}

这将在此时处理异常。您将记录它并忽略异常。如果要记录并传播它,则需要从catch子句中重新抛出它。

由于检查了异常(据我所知),您需要更改方法签名以表明您是从C.

B您不需要处理它时,您只需更改方法签名以指示该方法抛出异常。

阅读有关 Java 检查与未检查异常的更多信息,例如在此处输入链接描述

最后如果你想传播到A代码会是这样的:

public void A(){
    try{
        B();
    }
    catch(Exception e){
        log.error(e);
    }
}

public void B() throws Exception{
    C();
}

public void C() throws Exception{
    try{
        some_stuff();
    }
    catch(Exception e){
        log.error(e)
        throw e;
    }
}

推荐阅读