簡體   English   中英

如何在Java中捕獲異常?

[英]How to catch exception in Java?

我在代碼中遇到異常,我想捕獲內部異常。 有可能抓住嗎?

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嗎?

您不能直接這樣做。 您必須捕獲外部異常,檢查其getCause()以查看是否是所需異常,然后處理導致該異常的原因或重新引發頂級異常。

(從技術上講,您也可以只拋出內部的,但是我強烈不建議這樣做;堆棧跟蹤將非常混亂,並且將更加難以調試-尤其是從現在開始的一年,當您忘記了你做到了)

不,您不能使用catch(TimeoutException e)捕獲RuntimeException

但是,你可以做

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

得到原因。

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

但是您可以這樣實現:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM