正常执行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); } }