关于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();
}
}