在 c 語言中,如果發生錯誤,上級函式要進行出錯處理,層層上傳,容易造成過多的出錯處理**,並且傳遞的效率比較低下。
try
catch(exceptiontype var)
#include using namespace std;
void func1()
catch(double)
{cout<<"catch func1()"《結果為:
catch func1()
end func1()
end func2()
end func3()
end main
上邊的異常傳遞路線為 func3->func2()->func1(),在 func1 中找到對應的 catch 塊,然後執行對應 catch 塊中的語句,輸出:
catch func1()
整個的異常處理已經結束,跳出 func1() 的 try-catch 塊,繼續執行 func1() 的函式體,陸續輸出:
end func1()
end func2()
end func3()
end main
此時程序結束。
如果將 func1() 中的 catch 到的異常型別換個型別,如:
catch(void *)
結果為:
catch main
end main
則會在 func1(),func2(),func3() 中都找不到對應的 catch 匹配,直到 main 函式才能找到對應的匹配,然後輸出:
catch main
end main
如果將 main 函式中的 catch 捕獲型別也修改為:
catch(void *)
結果為:
terminate called after throwing an instance of 'double'
此時系統就會呼叫系統函式,使程式終止。
void func() throw (a,b,c); // 表明該函式只會丟擲 a,b,c 及其子型別的異常
void func() throw();
#include using namespace std;
class a
{public:
a(){ cout<<"a()"《結果為:
a()a()~a()
~a()
no x, no y
如果 throw 的是乙個類物件:
#include using namespace std;
class a
{public:
a(){ cout<<"a()"《結果為:
a()a(const a &obj)
~a()
no x, no y
~a()
捕獲和丟擲異常
異常處理5個關鍵字 try catch finally throw throws 不捕獲異常 public class test 捕獲異常,finally 可以不要,用於 假設io資源關閉,就會用到。public class test catch arithmeticexception e fina...
丟擲異常和捕獲異常 多捕獲和最終重新丟擲的異常處理
丟擲異常和捕獲異常 joseph d.darcy宣布,在langtools團隊成員maurizio cimadamore開發的多捕獲實現成功的經驗之後,具有多捕獲和最終重新丟擲的改進的異常處理將成為即將到來的jdk 7構建的一部分。當前,使用者可以將變更集應用於jdk 7 langtools儲存庫的...
oracle plsql 捕獲異常和丟擲異常
在寫oracle儲存過程的時候很多東西放到儲存過程裡面比如一些判斷等,要比在程式邏輯裡面簡單很多,但是也會涉及到捕獲和丟擲一樣的問題。exception when excepttion name1 then when excepttion name2 then when excepttion nam...