簡體   English   中英

通過catch塊直接處理父類和子類之間的異常有什么區別

[英]What is the difference between handling exceptions by catch block directly parent class and subclasses

我有以下Java代碼

import org.testng.annotations.Test;

@Test
public void testException(){
    try{
        Assert.assertEquals(1,2);
    } catch(Exception e) {
      e.printStackTrace();
    }
}

運行測試時,斷言失敗,異常打印為標准輸出,TestNG將測試結果顯示為FAILED。

如果我使用相同的異常

catch(AssertionError e){
    e.printStackTrace();
}

異常打印為錯誤輸出,TestNG將測試結果顯示為PASSED。 在這兩種情況下都處理異常,但這有什么區別?

AssertionError不是Exception的子類(它是Error的子類),因此帶有catch(Exception e)處理程序的第一個片段不會捕獲它。 因此測試結果為FAILED。

第二個片段捕獲異常,因此就TestNG而言, testException()測試中沒有異常,結果為PASSED。

因為AssertionErrorThrowableError子代,而不是Exception

java.lang.Object
   java.lang.Throwable
       java.lang.Error
           java.lang.AssertionError

所以行:

catch(Exception e){

在錯誤的情況下不會捕獲它。 你能做的是:

catch(Error e){

要么

catch(Throwable t){

但你必須小心,如此處所述

暫無
暫無

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

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