現在,你應該有怎樣的例外工作合理的想法。在這節課中,我們將覆蓋更多的一些有趣的例外情況。
未捕獲的異常
在過去的幾個例子,有相當多的情況下,函式假定其呼叫者(或另乙個函式在呼叫堆疊)處理的例外。在下面的例子中,假設有人會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 ...