异常处理错误场景

exceptions handling error scenario

我有以下场景:

  Class C{
  mainCall(){
try{
     //do something;
 }catch(MyException e)
     //doSomethingElse;
  }
}

Class A{
methodOne() throws myException{
 b.callMethodTwo();
}
}

class B{
callMethodTwo() throws myException{
  try {
            value = callService()//call some service
        } catch(HttpClientErrorException | HttpServerErrorException e){
            throw new MyException(e);
        }
 return value;
   }
}

如果在 callMethodTwo() 中发生一些异常(不是 HttpClientErrorException 或 HttpServerErrorException)。这种情况下的流程是什么? 方法C中的mainCall()中的catch部分是否会执行?我的代码中有将近 5 个链调用,但我试图在这里简化并生成这个 sceario。

处理异常以外的异常不会进入该 catch 块,因此 callMethodTwo 不会抛出 myException。

执行并验证它。你永远不会忘记。 callMethodTwo() 将抛出未捕获的异常。 A.methodOne() 会把同样的东西扔回去。 C.catch 会抓住它。

如果方法 callMethodTwo 中的语句 value = callService(); 抛出

  1. 类型HttpClientErrorExceptionHttpServerErrorException或其子类型的异常,它将被下面的catch块捕获。这个 catch 块将抛出一个类型为 MyException 的新异常,它会冒泡到 methodOne,然后又冒泡到 mainCall,最终会被catch块。
  2. 类型 MyException 或其子类型的异常,它将从 callMethodTwo 冒泡到 callMethodOne 再到 mainCall 最终被 catch块。
  3. 任何其他类型的异常,它将从callMethodTwo冒泡到callMethodOnemainCallmainCall的调用方法。

您还没有在 C mainCall() 中调用 A/B 的任何方法。您应该有一些可以抛出 MyException 的代码,然后只有您可以在那里捕获。