Java:移至下一个`catch`子句

时间:2018-12-10 14:42:58

标签: java exception-handling

我具有以下结构:

try {
  Request.Get(url).execute() // Apache Fluent
  // do some other stuff
} catch (HttpResponseException e) {
  if (e.getStatusCode() != 404) {
    //drop to next catch clause
  }
  handle404(e);
} catch (IOException e) {
  handleGenericIOException(e);
}

我无法弄清楚该if语句中的内容。我只想说“如果异常不是404,则像此子句一样执行该操作就不会捕获它”。但是简单地调用throw e只会将它从方法中抛出。有没有办法传递到下一个catch子句?

2 个答案:

答案 0 :(得分:3)

嵌套您的异常处理程序。

try {
  try {
    Request.Get(url).execute() // Apache Fluent
    // do some other stuff
  } catch (HttpResponseException e) {
    if (e.getStatusCode() != 404) {
      throw e;
    }
    handle404(e);
  }
} catch (IOException e) {
  handleGenericIOException(e);
}

重新抛出将被捕获在外部try / catch块中,因为HttpResponseExceptionIOException的子类。

答案 1 :(得分:2)

我认为您不能“放下”到下一个catch子句,但是您可能可以执行以下操作:

crmData

因为IOException也应该捕获HttpResponseExceptions(如果它是var req = HttpWebRequest.Create(url + "?name=value1&name2=value2");