未捕獲的異常

2021-06-23 05:37:38 字數 1190 閱讀 5806

現在,你應該有怎樣的例外工作合理的想法。在這節課中,我們將覆蓋更多的一些有趣的例外情況。

未捕獲的異常

在過去的幾個例子,有相當多的情況下,函式假定其呼叫者(或另乙個函式在呼叫堆疊)處理的例外。在下面的例子中,假設有人會mysqrt()處理異常,但如果沒有人把究竟發生了什麼?

這是我們的平方根程式再次,減去試塊在main():

123

4567

891011

1213

1415

1617

1819

2021

22#include "math.h" // for sqrt() function

using namespace std;

// a modular square root function

double mysqrt(double dx)

int main()

現在,讓我們說,使用者輸入的4,和mysqrt(- 4)提出了乙個例外。mysqrt()不處理異常,所以程式堆疊的減少及控制返回到main()。但沒有異常處理程式,在這裡,所以main()終止。在這一點上,我們就終止了我們的應用!

當main()終止與未處理的異常,作業系統會通知你,已發生未處理的異常錯誤。它是如何依賴於作業系統,但可能包括列印乙個錯誤資訊,彈出錯誤對話方塊,或簡單的崩潰。一些作業系統是比別人少優雅。這通常是你想要完全避免!

抓住所有處理程式

現在,我們發現自己在乙個condundrum:函式可以把任何資料型別的例外,如果沒有捕獲到異常,它會傳播到你的程式的頂部,使其終止。因為不知道如何呼叫功能,甚至實現它是可能的,我們如何才能避免這種情況的發生?

幸運的是,c + +為我們提供了乙個機制來捕獲所有異常型別。這是被稱為乙個包羅永珍的處理程式。乙個捕獲所有處理器的工作就像乙個正常的catch塊,除了可以用一種特定型別的捕捉,利用橢圓運算元(……)作為型抓。如果你記得的教訓7.14,橢圓和為什麼要避開他們,橢圓以前用來傳遞任何型別的乙個函式的引數。在這種情況下,他們所代表的任何資料型別的例外。這是乙個簡單的例子:

123

4567

891011

12try

catch (double dx)

catch (...) // catch-all handler

java 未捕獲異常的處理

當乙個執行緒因為未捕獲異常而退出時,jvm會把這個事件報告給應用程式提供的uncaughtexceptionhandler,如果handler不存在,預設的行為是向system.err列印出棧追蹤資訊。public inte ce uncaughtexceptionhandler 如何處理未捕獲異常...

WPF中未捕獲異常之處理

異常有兩類,一類是主線程異常,另一類是工作執行緒異常。一 主線程的未捕獲異常處理起來比較簡單 2 其次,事件函式可以如下 messagebox.show stringbuilder.tostring e.handled true 二 工作執行緒異常的捕獲 對於工作執行緒的未捕獲異常,也就是你主線程中...

APP級別處理未捕獲異常

前言 那麼它們是如何處理沒有try catch 捕獲到的異常 並 進行介面友好提示優化的處理呢。這裡我們通過乙個demo學習一下。一 建立乙個類 crashhandler 實現 uncaughtexceptionhandler 介面 當程式發生未捕獲異常時 由該類進行處理 public class ...