正常執行try後才能執行finally,catch中的語句可能會影響finally的執行html
使用 finally 塊,能夠清理在 Try 中分配的任何資源,並且,即便在 try 塊中發生異常,您也能夠運行代碼。 一般,控件離開 try 語句以後,finally的語句會阻止運行。 正常執行中 break、continue、goto 或 return 語句的執行,或對 try 語句外部異常的傳播,可能會致使發生控件轉換。web
已處理的異常中會確保運行關聯的 finally 塊。 可是,若是異常未獲得處理,則 finally 塊的執行取決於如何觸發異常展開操做。 此操做又取決於計算機是如何設置的。 有關更多信息,請參見 Unhandled Exception Processing in the CLR(CLR 中的未經處理的異常處理)。app
一般,當未經處理的異常停止應用程序時,finally 塊是否運行並不重要。 可是,若是您擁有的 finally 塊中的語句必須在該環境下運行,則一個解決方案是將 catch 塊添加到 try-finally 語句中。 或者,能夠捕獲多是在調用堆棧更上方的 try-finally 語句的 try 塊中引起的異常。 便可以捕獲調用了包含 try-finally 語句的方法中的、或調用了該方法的方法中的、或調用堆棧中任何方法中的異常。 若是未捕獲異常,則 finally 塊的執行取決於操做系統是否選擇觸發異常展開操做。ui
static void Main() { Console.WriteLine(Test()); Console.ReadKey(); } static int Test() { int num = 0; try { num = 1; throw new Exception("手動控制拋出異常"); return num; } catch (Exception e) { Console.WriteLine(e.Message); return num; } finally { num++; Console.WriteLine("我在Finally中num={0}", num); } }