亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

異常處理 - 捕獲多個異常未按預期工作

異常處理 - 捕獲多個異常未按預期工作

青春有我 2023-03-31 09:39:18
我有一個包含多個異常的 catch 塊 - Arithmetic 和 NullPointer 以及一個包含 Exception 的 catch 塊。我正在從 catch 塊調用一個方法,但它沒有正確找到異常實例。try {        int a = 10/0;    } catch (ArithmeticException | NullPointerException e) {        Exce(e);    } catch (Exception e) {        Exce(e);    }public static void Exce(ArithmeticException ex) {    System.out.println("Arithmetic");}public static void Exce(Exception ex) {    System.out.println("Exception");}但是我得到的輸出是“異?!?。我不確定為什么沒有顯示算術當我有單獨的算術和空指針的捕獲塊時..我能夠打印“算術”..但是捕獲多個異常不起作用......
查看完整描述

2 回答

?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

如果將 ArithmeticException 和 NullPointerException 拆分為 2 個 catch 塊,它會按預期工作。我假設這是因為變量 e 被聲明為 Exception 類型,以便能夠容納 ArithmeticException 和 NullPointerException。


public static void main(String[] args) {

    try {

        int a = 10 / 0;

    } catch (ArithmeticException e) {

        Exce(e);

    } catch (NullPointerException e) {

        Exce(e);            

    } catch (Exception e) {

        Exce(e);

    }

}


查看完整回答
反對 回復 2023-03-31
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

} catch (ArithmeticException | NullPointerException e) {
    Exce(e);
}

上面的編譯時類型是和的并集。因此,當編譯器嘗試將 的類型與方法進行匹配時:eArithmeticExceptionNullPointerExceptioneExce

  • 重載Exce(ArithmeticException)不適用,因為在運行時e可能是一個NullPointerException.

  • 重載Exce(Exception)是適用的,因為e匹配的聯合的任何值ArithmeticException也是NullPointerException一個Exception。

不幸的是,您不能為 ... 聲明方法重載,ArithmeticException | NullPointerException即使您想要:

  • 如果你想像ArithmeticException | NullPointerException這樣一起處理,你可以像這樣聲明一個重載:

    public static void Exce(RuntimeException ex) {
        System.out.println("RuntimeException");
    }
  • 或者,分別捕獲ArithmeticExceptionNullPointerException。

  • 也可以在一個 catch 子句中捕獲這兩個異常,然后使用(比如說)instanceof和類型轉換來區分它們。但是要做到這一點需要更多的代碼。(由于其他原因,這是個壞主意。)


查看完整回答
反對 回復 2023-03-31
  • 2 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號