異常的機制,格式如下:
try//後面可以抓取很多和catch(),編譯器會根據
//引數來進行匹配
catch(char *s)
catch(int a)
catch(…)//表示剩下全部的情況
#include
#include
using
namespace std;
classa;
voidk(
void
)voidkk(
void
)catch
(char a)
//如果是執行throw(10),丟擲的是整形的異常,由於這裡沒有
//捕捉到這個異常,是不會正常往下執行,會繼續往外面丟擲異常
cout<<
"kk程式結束"
<
}int
main()
catch
(int a)
//如果kk丟擲來的異常,main函式沒有對應的型別接住的話,
//程式就執行到此結束了,不會往下執行了。
cout<<
"main程式結束"
總結:1)異常機制與函式機制互不同,異常機制捕捉的方式是基於型別匹配。捕捉相當於函式返回型別的匹配,而不是函式引數的匹配。
2.)丟擲乙個類要加上括號,例如throw(a());
3)如果丟擲乙個異常,但是沒有相應的catch的話,這個異常就會一層一層往外拋,指導main函式為止,如果main函式沒有相應的動作的話,那就直接執行預設處理函式terminate將被自動呼叫,其預設功能是呼叫abort終止程式。
修改系統預設行為:
可以通過set_terminate函式修改捕捉不住異常的預設處理器,從而使得發生捉不住異常時,被自定義函式處理:
void myterminate()
set_terminate(myterminate);
set_terminate函式在標頭檔案exception中宣告,引數為函式指標void(*)().
棧解旋異常被丟擲後,從進入try塊起,到異常被拋擲前,這期間在棧上的構造的所有物件,都會被自動析構。析構的順序與構造的順序相反。這一過程稱為棧的解旋(unwinding)。
#include
#include
using
namespace std;
classa~
a(void)}
;classb~
b(void)}
;classc~
c(void)}
;voidkk(
void
)int
main()
catch
(c) cout<<
"main程式結束"
1)為了加強程式的可讀性,可以在函式宣告中列出可能丟擲的所有異常型別,例如:
void func() throw (a, b, c , d); //這個函式func()能夠且只能丟擲型別a b c d及其子型別的異常。
2)如果在函式宣告中沒有包含異常介面宣告,則次函式可以拋擲任何型別的異常,例如:
void func();
3)乙個不拋擲任何型別異常的函式可以宣告為:
void func() throw();
4) 如果乙個函式丟擲了它的異常介面宣告所不允許丟擲的異常,unexpected函式會被呼叫,該函式預設行為呼叫terminate函式中止程式。
CoreJava學習第十一課 異常處理
異常是程式執行過程中不正常的情況.1.異常的傳遞方式 異常的傳遞方式 狀態碼方式 包含的資訊有限 可能和正常結果衝突 如果是銀行卡的餘額顯示,則可能和狀態碼衝突 不強制要求處理 分層開發中,有時狀態碼傳遞到中層時,可能會不傳遞或處理 異常物件的方式 通過 throw 手動丟擲異常,相當於 retur...
Linux第十一課
apache 一 虛擬主機 apache可基於ip位址 主機網域名稱 埠號實現提供多個 同時為外部提供訪問服務的技術。使用網域名稱,要在 etc hosts檔案中做本地強制解析 基於埠號,要注意新增用於監聽埠的引數 二 訪問控制 基於源主機名 源ip位址 或源主機上的瀏覽器特徵等資訊對 上的資源繼續...
C 入門第十一課
class player public player string name public player string name,int atk this name public player string name,int atk,int hp this name,atk static void ...