首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中捕获异常?

如何在Java中捕获异常?
EN

Stack Overflow用户
提问于 2018-06-07 04:19:26
回答 3查看 201关注 0票数 0

我的代码中出现了下面的异常,我想捕获内部异常。有没有可能抓到它?

代码语言:javascript
复制
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

假设我有以下代码。

代码语言:javascript
复制
function abc() {
  try{
    xyz()
  } catch (TimeoutException e) {
     do stuff
  }
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-07 04:24:09

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

(从技术上讲,您也可以只重新抛出内部的堆栈,但我强烈建议您不要这么做;堆栈跟踪将非常混乱,并且更难调试--特别是一年后,当您忘记这样做的时候。)

票数 3
EN

Stack Overflow用户

发布于 2018-06-07 04:24:21

不,你不能用catch(TimeoutException e)感染RuntimeException

但是,您可以这样做

代码语言:javascript
复制
} catch (RuntimeException e) {
  Throwable cause = e.getCause(); 
}

才能找到原因。

票数 1
EN

Stack Overflow用户

发布于 2018-06-07 04:32:11

您不能直接捕获由TimeoutException引起的RuntimeException

但是你可以这样实现它:

代码语言:javascript
复制
    try {
        xyz();
    } catch (RuntimeException e) {
        if (e.getCause() instanceof TimeoutException) {
            // handle TimeoutException
            doStuff();
        } else {
            // rethrow all exceptions with other causes
            throw e;
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50728901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档