黑马程序员技术交流社区
标题:
try-catch中关于finally的疑问
[打印本页]
作者:
神马王刚
时间:
2012-10-6 22:32
标题:
try-catch中关于finally的疑问
本帖最后由 神马王刚 于 2012-10-7 15:43 编辑
Console.WriteLine("输入年龄");
try
{
int age = Convert.ToInt32(Console.ReadLine());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("走到这");
}
Console.ReadKey();
首先上代码,完整的try-catch是包含finally的么?我们常用的只是try-catch部分,难道是因为try-catch执行完后继续执行下面的代码的话,finally写与不写没分别,就干脆省略了?还是为了让整个结构和流程看起来更清晰而加上finally和后面的语句块?finally里能释放资源?
作者:
和志强
时间:
2012-10-6 22:37
异常处理代码的作用范围用标记子句(try或begin开始的语言作用域)标示其起始,以第一个异常处理子句(catch, except, resuce等)标示其结束;可连续出现若干个异常处理子句,每个处理特定类型的异常。某些语言允许else子句,用于无异常出现的情况。更多见的是finally, ensure子句,无论是否出现异常它都将执行,用于释放异常处理所需的一些资源。
作者:
陈顺亮
时间:
2012-10-6 22:45
用于释放资源
作者:
赵雅晴
时间:
2012-10-6 23:20
首先try-catch是抓异常的,如果有异常会影响下面程序的运行,所以用,finally让程序在出异常的情况下不会中断运行,第二个好处就是在无论程序走到try还是catch里,最后都会走到finally,可以在这里释放资源
作者:
邓艳秋
时间:
2012-10-6 23:25
完整的try-catch是可以不包括finally的,但是作为一个合格的程序员,我们首先要想到的是怎么合理利用资源。
而关于处理异常的就不多说了,有了异常但不处理异常里的资源将会造成极大的浪费。所以,finally是规范,想成为一个好的程序员,请坚决使用finally.
作者:
管海鹏
时间:
2012-10-6 23:33
try{}catch(Exception ex){}
用于捕获异常的
try
{
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
}
catch
{
//除非try里面执行代码发生了异常,否则这里的代码不会执行
}
finally
{
//不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally
}
作者:
刘俊红
时间:
2012-10-7 01:51
本帖最后由 刘俊红 于 2012-10-7 01:52 编辑
try 语句有三种不同的形式:
一个 try 块后接一个或多个 catch 块。
一个 try 块后接一个 finally 块。
一个 try 块后接一个或多个 catch 块,后面再跟一个 finally 块。
所以:try后面不一定必须跟finally,但是跟finally,并把善后处理的代码写在里面更符合规范。
finally本身当然不能释放资源,只是一般把包括释放资源等善后操作的语句写在里面。
作者:
潘梦军
时间:
2012-10-7 09:27
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(SQLString, connection);
System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
myParameter.Value = content;
cmd.Parameters.Add(myParameter);
try
{
connection.Open();
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return null;
}
else
{
return obj;
}
}
catch (System.Data.SqlClient.SqlException E)
{
throw new Exception(E.Message);
}
finally
{
cmd.Dispose();
connection.Close();
}
}
这是执行带一个存储过程参数的的SQL语句,finally用于释放资源,但是有些时候不需要释放资源的情况也可以不用finally.还是根据你用到的实际情况自己决定要不要用
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2