日期:2014-05-18  浏览次数:20766 次

关于finally语句的提问
class   Exce
        {
                static   void   Main()
                {
                        try
                        {
                                Console.WriteLine( "Executing   the   try   statement. ");
                                throw   new   NullReferenceException();
                        }
                        catch   (NullReferenceException   e)
                        {
                                Console.WriteLine( "   Caught   exception   #1. ");
                        }                        
                      finally
                        {
                                Console.WriteLine( "Executing   finally   block. ");
                        }
                }
        }
在try_catch_finally这个结构中,finally语句如果去掉的话,   Console.WriteLine( "Executing   finally   block. ");这句都会执行的,那么
finally语句到底有什么作用。

------解决方案--------------------
不一样....
要是catch 块中再有异常抛出...
finally 块一样会执行.

要是没没finally ,catch 块中抛出异常,catch后面的语句就不能执行了..


------解决方案--------------------
除了 yeerh(边城浪) 说的情况,还有一种情况,就是如果 try...catch ... 中有renturn 时:
1、有 finally 块的代码 Console.WriteLine( "Executing finally block. ");始终要执行,只有执行完 Console.WriteLine( "Executing finally block. ");才真正返回;
2、没有 finally 块的代码,则在遇到 return 时就返回了。
所以,finally 块可以增强系统的稳定性,一般在此处放置的代码一般是系统资源的释放工作。
比如:
IDBWrapper dbWrapper = GetDBWrapper();
try
{
dbWrapper.Open();
dbWrapper.BeginTrains();

// somethings

dbWrapper.CommitTrains();
}
catch(Exception exp)
{
// 记录错误日志
}
finally
{
if (ConnectionState.Closed != dbWrapper.State)
{
// 关闭数据库联接
dbWrapper.Close();
}
}