如何在Java中捕获异常?

时间:2018-06-06 20:19:26

标签: java exception

我在代码中遇到异常,我想捕获内部异常。有可能赶上吗?

java.lang.RuntimeException: error
some stack trace
some stack trace
some stack trace
! Caused by: java.util.concurrent.TimeoutException: null
some stack trace
some stack trace
some stack trace

假设我有以下代码。

function abc() {
  try{
    xyz()
  } catch (TimeoutException e) {
     do stuff
  }
}

xyz()函数正在生成该异常。像这样的工作会捕获TimeoutException吗?

3 个答案:

答案 0 :(得分:3)

你不能直接这样做。您必须捕获外部异常,检查其getCause()以查看它是否是您想要的,然后处理该原因或重新抛出顶级异常。

(你也可以从技术上重新抛出内部的那个,但我强烈反对这一点;堆栈跟踪会非常混乱,并且调试起来会更难 - 尤其是从现在开始的一年,当你'我忘记了你那样做了。)

答案 1 :(得分:1)

不,您无法使用RuntimeException抓住catch(TimeoutException e)

但是,你可以做到

} catch (RuntimeException e) {
  Throwable cause = e.getCause(); 
}

得到原因。

答案 2 :(得分:1)

您无法直接抓住由RuntimeException引起的TimeoutException

但你实现这样:

    try {
        xyz();
    } catch (RuntimeException e) {
        if (e.getCause() instanceof TimeoutException) {
            // handle TimeoutException
            doStuff();
        } else {
            // rethrow all exceptions with other causes
            throw e;
        }
    }