关于 tr{}finally{} public int test(){ try { return 1; } finally { dosomething(); //此处的代码在方法返回后,何时才会执行?执行时不是不在一个新线程中执行? }} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 dosomething(); 执行完了再Return 这种结构是经常用到的,比如连接数据库时,通常都会在finally位置写断开与数据库连接的代码,为的就是保证一定会与数据库断开连接。 finally怎么都要执行,你为什么不把Return也放里面? finally中的语句是在方法返回后.必须执行的.但问题是返回后多久?(什么时候)在哪里执行?(新线程中.还是当前线程) 这样子都不需要try了吧,要不就弄个if判断一下 楼上的兄弟解释的很清楚了,写段代码自己瞧吧!<script language="JavaScript"><!--var t = -1;function a(){ try { return 1; } finally { alert("t: " + t); }}t = a();alert("t: " + t);//--></script> 晕,上边居然没人讲呀,哈!注意:如上例,finally 在 return 语句执行前被执行!如果有异常的话,在 throw 前被执行。找本儿参考手册一看就清楚了。 先执行return 后执行finally 是否多线程不知道 先执行return 不管执行是否成功都执行finally ,至于finally 在哪个线程,我测试了一下,得到两个当前线程名都是空。估计应该是一个线程,,要不高手在测测把 public int test(){ try { return 1; } finally { dosomething(); //此处的代码在方法返回后,何时才会执行?执行时不是不在一个新线程中执行? }}dosomething(); 执行完了再Return就这个代码看是不存在多线程的。 dosomething(); 执行完了再Return你跟踪一下下就知道了啦! 这段 finally{} 中的 dosomething() 永远不会被执行。因为代码在执行到return后,就直接跳出函数了。所有后面的代码都不会执行。 一般finally{}一定会被执行的。但是如果在try{}中直接使用return,当前函数将直接返回1,按照程序的执行顺序,retrun后的所有代码都是不会被执行的。 To redbb(....DB & DEV....抵制日货,人人有责...),不好意思,我测试了一下, dosomething() 会执行。 static int Main(string[] args) { try { Console.WriteLine("In Main Try Module"); return 1; } finally { Console.WriteLine("In Main finally Module"); Console.Read(); } }执行结果如下:In Main Try ModuleIn Main finally Module那么是不是很明显说明 FINALLY 块一定被执行, RETURN不起所谓"以下代码不可能被执行"的作用. finally一定会执行。return语句执行后会将return的值存放在临时变量中,然后执行finally语句。finally当然会在同一线程执行,绝不会在新线程中执行。finally中不可以有return语句(编译通不过,但JAVA是允许的)通常如果return的值可能被finally语句改变,建议将return语句放在try-finally块的外面,这样比较清晰。 finally是无条件执行的,楼主看看msdn就明白了 using System;using System.Text;namespace ConsoleApp{ class Class1 { static int d = 0; static void Main() { Console.WriteLine("Main1:" + test()); d++; Console.WriteLine("Main2:" + d); Console.ReadLine(); } static public int test() { try { return getInt(); } finally { d++; Console.WriteLine("Finally:" + d); System.Threading.Thread.Sleep(2000); } } static int getInt() { Console.WriteLine("Return:" + d); return d; } }}简单测试了一下..www_123du_com(鼠·神·泪)的为最佳答案. C# 我winform 捕捉摄像头(100分) treeview控件和contextmenutrip控件使用的一个问题 正则表达式截取字符串 重大发现!看完可能你再也不想用.net做开发了! WinForm下的DataGrid问题 C#网络编程,用TCP协议发送图片!~~~~~~ 键盘按键问题求助 wince 环境下 c#无法取消标题栏 求教 使用C#的感觉 如何实现在用C#开发的windows应用程序中插入HTML语句? 如何获取C# 窗体客户区大小 求教,网络上看电影,看的人越多,速度越块的原理
怎么都要执行,你为什么不把Return也放里面?
但问题是返回后多久?(什么时候)
在哪里执行?(新线程中.还是当前线程)
<!--
var t = -1;
function a()
{
try
{
return 1;
}
finally
{
alert("t: " + t);
}
}
t = a();
alert("t: " + t);
//-->
</script>
{
try
{
return 1;
}
finally
{
dosomething(); //此处的代码在方法返回后,何时才会执行?执行时不是不在一个新线程中执行?
}
}dosomething(); 执行完了再Return
就这个代码看是不存在多线程的。
你跟踪一下下就知道了啦!
因为代码在执行到return后,就直接跳出函数了。所有后面的代码都不会执行。
但是如果在try{}中直接使用return,当前函数将直接返回1,按照程序的执行顺序,retrun后的所有代码都是不会被执行的。
不好意思,我测试了一下, dosomething() 会执行。
{
try
{
Console.WriteLine("In Main Try Module");
return 1;
}
finally
{
Console.WriteLine("In Main finally Module");
Console.Read();
}
}
执行结果如下:In Main Try Module
In Main finally Module
那么是不是很明显说明 FINALLY 块一定被执行, RETURN不起所谓"以下代码不可能被执行"的作用.
楼主看看msdn就明白了
using System.Text;namespace ConsoleApp
{
class Class1
{
static int d = 0;
static void Main()
{
Console.WriteLine("Main1:" + test());
d++;
Console.WriteLine("Main2:" + d);
Console.ReadLine();
}
static public int test()
{
try
{
return getInt();
}
finally
{
d++;
Console.WriteLine("Finally:" + d);
System.Threading.Thread.Sleep(2000);
}
}
static int getInt()
{
Console.WriteLine("Return:" + d);
return d;
}
}
}
简单测试了一下..
www_123du_com(鼠·神·泪)的为最佳答案.