C C 知識回顧 學會處理異常

2022-01-12 11:40:08 字數 2723 閱讀 6415

你可以使用 try 塊來對你覺得可能會出現異常的**進行分割槽。 其中,與之關聯的 catch 塊可用於處理任何異常情況。 乙個包含**的 finally 塊,無論try塊中是否在執行時引發異常(例如,釋放在try塊中分配的資源),這些 finally 塊的**都會執行。 這些「異常部分」:可以由乙個try塊、乙個或多個關聯的catch塊、乙個finally塊分別組合。

這裡我列舉了 3 種情況:乙個try-catch語句,乙個try-finally語句,和乙個try-catch-finally語句。

try-catch:

1

static

void main(string

args)27

catch

(exception e)

812 }

try-finally:

1

try2

5finally

6

try-catch-finally:

1

try2

5catch

(exception e)69

finally

10

【備註】不帶有catchfinally塊的try塊將導致編譯器錯誤。

catch塊可以指定要捕捉的異常型別,又可以稱為「異常篩選器」。 異常型別都是從 exception 派生出來。 一般來說,我們不會將所有異常的基類 system.exception 指定為要 catch 的「異常篩選器」,除非你非常了解如何處理由try塊引發的所有異常,或者在catch塊中包括了 throw 語句。

多個catch塊可以串聯在一起(要求異常篩選器不同)。 多個catch塊的執行順序是:在**中,從頂部到底部,但是,對於在執行時所引發的每乙個異常,程式都只會執行乙個catch資料塊。 與指定的異常型別或它的基類相匹配的第乙個catch塊,才會被執行。 通常,我們需要將最特殊(最具體或者說派生程度最最最高)的異常類,這段catch塊放在所有 catch 塊的最前面,而他們的基類 excetion 的 catch 塊就放在最後(當然,也可以不寫)。

在以下條件為真時,你應該選擇 catch 異常:

1

double getnum(double nums,int

index)27

catch

(indexoutofrangeexception e)

811 }

希望在將異常丟擲去時,我們通常會選擇處理部分異常。 在下面這個示例中,catch塊在再次 throw 異常之前,新增錯誤日誌。

1

try2

5catch

(exception e)

6

可以使用finally塊釋放(清理)在try塊中需要執行釋放(清理)資源的操作。 如果存在finally塊,它將在最後執行,也就是在try塊和任何匹配catch塊之後執行。 不管是否引發異常或者說是否找到與異常型別相匹配的catch塊,finally塊它始終都會執行。

可以使用finally塊釋放資源(如 io 流、db 連線和圖形控制代碼),而不要等待執行時中的垃圾**器來完成物件資源的**。 其實,我們更建議使用 using 語句。

在下面的示例中,我使用finally塊關閉在try塊中開啟的檔案。注意,在關閉檔案之前你應該要檢查該檔案控制代碼的狀態。 如果try塊無法開啟檔案,則檔案控制代碼的值依然為null,這時,finally塊就不會嘗試關閉它。 或者說,如果在try塊中成功開啟該檔案,則finally塊才會成功地關閉正在開啟的檔案。

1

static

void main(string

args)211

finally

1218}19

20 }

《c# 知識回顧 - 序列化》

《c# 知識回顧 - 表示式樹 expression trees》

《c# 知識回顧 - 特性 attribute》、《剖析 assemblyinfo.cs - 了解常用的特性 attribute》

《c# 知識回顧 - 委託 delegate》、《c# 知識回顧 - 委託 delegate (續)》

《c# 知識回顧 - 事件入門》、《c# 知識回顧 - event 事件》

《string 與 string,大 s 與小 s 之間沒有什麼不可言說的秘密》

《c# 知識回顧 - 異常介紹》、《c# 知識回顧 - 學會使用異常》

【博主】反骨仔

【原文】

【參考】微軟官方文件

C C 知識回顧 指標

1 非空的區別。引用不能為空。2 可修改區別。引用一旦被初始化,就會一直指向初始化的物件。3 合法性區別。在程式設計時,使用指標之前應該檢測其是否為空值。4 應用區別。指標多用於可能會不指向任何物件的情況 int f int int int f是乙個函式指標,它指向引數是兩個int的函式,該函式的返...

C C 知識回顧 Lambda

它是第十乙個希臘字母,乙個擁有失意 無奈 孤獨 低調等含義的流行符號,也指示一款稱為 半條命 的遊戲。不過,這次我所講的是 c 中的 lambda。lambda 表示式,是一種簡化的匿名函式,可用於建立委託或表示式目錄樹。其次,你也可以將 lambda 表示式作為引數進行傳遞,或者將它作用於函式呼叫...

C C 知識回顧(二) Sizeof

1.指標大小為4個位元組 2.結構體內的元素長度都小於處理器的位數的時候,以最長的資料元素作為對齊單位 如果結構體內存在長度大於處理器位數的元素,那麼就以處理器的位數為對齊單位 3.注意位址對齊 4.static 靜態變數存放在全域性資料區,sizeof不會計算它。5.char s 01234567...