你可以使用 try 塊來對你覺得可能會出現異常的**進行分割槽。 其中,與之關聯的 catch 塊可用於處理任何異常情況。 乙個包含**的 finally 塊,無論try
塊中是否在執行時引發異常(例如,釋放在try
塊中分配的資源),這些 finally 塊的**都會執行。 這些「異常部分」:可以由乙個try
塊、乙個或多個關聯的catch
塊、乙個finally
塊分別組合。
這裡我列舉了 3 種情況:乙個try-catch
語句,乙個try-finally
語句,和乙個try-catch-finally
語句。
try-catch:
1static
void main(string
args)27
catch
(exception e)
812 }
try-finally:
1try2
5finally
6
try-catch-finally:
1try2
5catch
(exception e)69
finally
10
【備註】不帶有catch
或finally
塊的try
塊將導致編譯器錯誤。
catch
塊可以指定要捕捉的異常型別,又可以稱為「異常篩選器」。 異常型別都是從 exception 派生出來。 一般來說,我們不會將所有異常的基類 system.exception 指定為要 catch 的「異常篩選器」,除非你非常了解如何處理由try
塊引發的所有異常,或者在catch
塊中包括了 throw 語句。
多個catch
塊可以串聯在一起(要求異常篩選器不同)。 多個catch
塊的執行順序是:在**中,從頂部到底部,但是,對於在執行時所引發的每乙個異常,程式都只會執行乙個catch
資料塊。 與指定的異常型別或它的基類相匹配的第乙個catch
塊,才會被執行。 通常,我們需要將最特殊(最具體或者說派生程度最最最高)的異常類,這段catch
塊放在所有 catch 塊的最前面,而他們的基類 excetion 的 catch 塊就放在最後(當然,也可以不寫)。
在以下條件為真時,你應該選擇 catch 異常:
1double getnum(double nums,int
index)27
catch
(indexoutofrangeexception e)
811 }
希望在將異常丟擲去時,我們通常會選擇處理部分異常。 在下面這個示例中,catch
塊在再次 throw 異常之前,新增錯誤日誌。
1try2
5catch
(exception e)
6
可以使用finally
塊釋放(清理)在try
塊中需要執行釋放(清理)資源的操作。 如果存在finally
塊,它將在最後執行,也就是在try
塊和任何匹配catch
塊之後執行。 不管是否引發異常或者說是否找到與異常型別相匹配的catch
塊,finally
塊它始終都會執行。
可以使用finally
塊釋放資源(如 io 流、db 連線和圖形控制代碼),而不要等待執行時中的垃圾**器來完成物件資源的**。 其實,我們更建議使用 using 語句。
在下面的示例中,我使用finally
塊關閉在try
塊中開啟的檔案。注意,在關閉檔案之前你應該要檢查該檔案控制代碼的狀態。 如果try
塊無法開啟檔案,則檔案控制代碼的值依然為null
,這時,finally
塊就不會嘗試關閉它。 或者說,如果在try
塊中成功開啟該檔案,則finally
塊才會成功地關閉正在開啟的檔案。
1static
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...