当前位置:编程学习 > C#/ASP.NET >>

C#难题:什么情况下 finally 中的代码不会执行

大家罗列下。 --------------------编程问答-------------------- return;
--------------------编程问答-------------------- 强制结束进程(线程),其它的话肯定会执行 --------------------编程问答-------------------- 非当前过程原因的错误会使得Finally代码不运行。 --------------------编程问答--------------------  断电了 --------------------编程问答-------------------- exit(0),process.kill.while(true)不退出。 --------------------编程问答-------------------- 比如···你根本没有运行程序·····它就绝对不会运行finally····· --------------------编程问答-------------------- 死于非命 --------------------编程问答-------------------- --------------------编程问答-------------------- cache部分的代码又抛出了异常 --------------------编程问答-------------------- 不太严谨,补充一下,必须导致崩溃了,才不执行Finally

引用 9 楼 litaoye 的回复:
cache部分的代码又抛出了异常
--------------------编程问答--------------------  finally 按照常理和正常的逻辑来说是必须执行的
--------------------编程问答-------------------- 老版本.NET中,Thread.Abort()可终止正在执行finally块的线程

已修复 --------------------编程问答-------------------- 断网了 肯定不执行! --------------------编程问答-------------------- 异常情况肯定会执行finally的 --------------------编程问答-------------------- return;在try里,finally也会执行 --------------------编程问答-------------------- 除非程序崩溃,或者硬件方面原因~~ --------------------编程问答-------------------- Finally是另外一个系统,
你可以在IL中修改了就不执行了 --------------------编程问答--------------------  那必须的。。。 --------------------编程问答--------------------
try{

    if(you believe(it) == true || you believe(it) == false){

        I.believe(it);

    }

}catch(Exception e){

   throw new Exception("it is a miracle!")

}

finaly{

   it.justHappend();

}
--------------------编程问答-------------------- 必须不能不执行 --------------------编程问答-------------------- process.kill(当前进程名) --------------------编程问答--------------------

try
            {
                throw new NullReferenceException();
            }
            catch (Exception ex)
            {
                throw new NullReferenceException();
            }
            finally
            {
                Console.Write("aaa");
            }
--------------------编程问答-------------------- 不写finaly,它就不会执行。 --------------------编程问答-------------------- catch中也抛出异常了,而且上层的代码没有try起来,就导致。net自己本省的异常处理,应该就不执行了吧!
其他条件都会执行吧! --------------------编程问答-------------------- 顶下... --------------------编程问答-------------------- 意外终止 --------------------编程问答-------------------- 在没有在try 后面写finally 的时候否则 肯定执行~ 
即使有return 也是执行的 --------------------编程问答-------------------- 总结下楼上同志们的话
1. return是不起作用的,finaly会在return前执行
2. catch块抛出异常,且外层没有对其进行catch时,.net机制会中断程序执行,所以,finaly里的语句也就不执行了 --------------------编程问答-------------------- 程序无响应。
线程无限循环调用。
没有捕捉异常。
and so on... --------------------编程问答-------------------- 没有执行到trycatch所在的方法体,或类 --------------------编程问答-------------------- 好搞啊   楼主你。报错就不执行啦 --------------------编程问答-------------------- finally看见美女了,,, --------------------编程问答-------------------- 然后跟美女私奔了。。。。。。。 --------------------编程问答-------------------- 正常情况下都会执行,只有在不正常情况下才不会执行。 --------------------编程问答-------------------- 又要写finally又要它不执行?为什么? --------------------编程问答-------------------- goto,hehe --------------------编程问答-------------------- stack overflow --------------------编程问答-------------------- 真水~~~~~~~~~~~~ --------------------编程问答-------------------- 我来看看!呵呵 --------------------编程问答-------------------- up下 --------------------编程问答-------------------- finally就是为了在出错的情况下也能执行才搞出的,要不然要它干吗啊 --------------------编程问答-------------------- 不写的话就不执行了,还有就是在catch中有return就不执行了 --------------------编程问答--------------------
引用 42 楼 zhongkang567 的回复:
不写的话就不执行了,还有就是在catch中有return就不执行了

在catch中return也是会执行的! --------------------编程问答--------------------
引用 28 楼 zhouwc520 的回复:
总结下楼上同志们的话
1. return是不起作用的,finaly会在return前执行
2. catch块抛出异常,且外层没有对其进行catch时,.net机制会中断程序执行,所以,finaly里的语句也就不执行了


1的观点有问题
finaly 是在 return 之后执行的
试试下面的代码你就知道了

try{

int i = 8;
return i;

}catch(Exception e){

}

finaly{

   i = 9;

}
--------------------编程问答-------------------- 写错了 i 应该定义在try外面 --------------------编程问答-------------------- 程序被弹出模式窗口卡住了,然后异常结束软件,比如结束线程,断电。。。 --------------------编程问答-------------------- 必须执行! --------------------编程问答-------------------- it just happened
引用 19 楼 kingboy2008 的回复:
C# code
try{

    if(you believe(it) == true || you believe(it) == false){

        I.believe(it);

    }

}catch(Exception e){

   throw new Exception("it is a miracle!")

}

finaly{
……
--------------------编程问答-------------------- 没有人知道? --------------------编程问答-------------------- --------------------编程问答-------------------- C#中的finally是必须执行的,同时C#中的Try..Catch..中finally不是必须结构。不过在以下情况下finally不会执行:
1.程序在执行finally之前崩溃;
2.程序线程在finally之前被终止;
3.程序在执行finally之前出现内存错误或数据溢出;
4.当Try..Catch..Finally结构错误。即Try没有执行(并非Try当中的语句),Finally自然不会执行。
5.内存错误导致的内存地址变化。
不过基本上以上情况都不太会出现。 --------------------编程问答-------------------- 人呢? --------------------编程问答--------------------
引用 44 楼 jy02305022 的回复:
引用 28 楼 zhouwc520 的回复:

总结下楼上同志们的话
1. return是不起作用的,finaly会在return前执行
2. catch块抛出异常,且外层没有对其进行catch时,.net机制会中断程序执行,所以,finaly里的语句也就不执行了


1的观点有问题
finaly 是在 return 之后执行的
试试下面的代码你就知道了

C# code
……


finally 是在return前执行的,你把return i换成一个对象就知道了
你写的这个代码跟我曾经出过的面试题目很像的 --------------------编程问答-------------------- 1)在进入finaly之前连续抛出两次以上一场,即在Catch中抛出异常,并不会被自己捕获。
2)在进入finaly之前,线程停止。
3)在进入finaly之前,GOTO --------------------编程问答-------------------- 在执行之前出现异常而且不能捕捉到,就不能执行。

finaly的原意是,无论是try和catch,最终还是要运行它的。 --------------------编程问答-------------------- 这个问题的意义是什么 --------------------编程问答-------------------- 没写的情况下肯定不会运行…… --------------------编程问答-------------------- 用goto跳出去 --------------------编程问答-------------------- 说的时候自己能先验证一下吗,误导人啊
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,