c# try-finally有啥用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# try-finally有啥用?相关的知识,希望对你有一定的参考价值。

像是用try-catch-finally的用法,不知道finally有什么意义,既然finally是无论是否错误都执行,那么直接放到外面效果不也是一样的吗?例如
try
int 1="";
catch
MessageBox.show("错误!");


MessageBox.show("123");

try
int 1="";
catch
MessageBox.show("错误!");
finally

MessageBox.show("123");

不是一样的吗?因为catch捕捉了错误,所以并不会导致程序停止的?还是会继续向下执行的啊?

【提示:电脑查看请点击本回答右下角“展开”,可以看到排版】

NO,NO,NO。

finally 代码块中的代码是 try-catch 结构执行完后无论有无异常发生都会执行的。finally 代码块中的代码是 try-catch 结构执行完后无论有无异常发生都会执行的。finally 代码块中的代码是 try-catch 结构执行完后无论有无异常发生都会执行的。

重要的事情说三遍。重点要强调的是,finally 的执行条件只有这一个。

为什么要这么强调。是因为你很可能在 try-catch 里直接 return 啊 break 啊 continue 啥的,导致跳出 try-catch 结构。你可能会想当然的认为既然我 return 了直接返回结果 finally 里的代码就不会执行。这是错误的!因为 finally 执行条件只是【try-catch 结构执行完】,即使 try-catch 里 return 了,依然还是会先执行 finally 里的代码,然后才会真的 return。

而你要是不用 finally,直接把最后要统一执行的代码放在 try-catch 外面,那 try-catch 一 return,你的代码就不会被执行了。

所以 finally 最常用的地方是在里面释放对象占用的资源的。
参考技术A 程序执行到异常并抛出后,异常下面的代码是不被执行的,放在finally里不管是否出现异常都会被强制执行。追问

不触发程序本身的错误(throw),异常下面的代码还是会被执行,我特意试过的,因为异常的处理方式被更改为触发catch,所以不会触发默认的中断代码。程序也会继续被执行。

追答

不触发异常程序当然会正常执行下去。

追问

我说的是程序发生异常,但是被捕获到catcn里,catch的处理不会终止程序。但是如果用throw抛出异常(不使用try而出现异常的情况),这样才会中断程序,但是即使这样中断,finally也会执行的吗?

C# try catch finally 里面写Exception e是为啥?这个e有啥用?Exception e能改成别的吗?

Exception是所有异常类的基类,catch后面的括号表示你需要在这里捕获什么类型的异常。e是变量,可以随便改写,Exception可以改写为你需要捕获的异常,如 NullReferenceException追问

如果只写Exception是不是表示捕获所有的异常?

参考技术A e是Exception对象的一个实例而已,仅仅只是一个名字,可以换成其它的名字 通过这个对象可以获取到具体的异常信息,以及异常信息来源等等

以上是关于c# try-finally有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

Java中final有啥用

使用没有“catch”块的“try-finally”块

Java里面用try catch异常处理之后,catch之后的代码也会执行,那还要finally有啥用啊?

tryresources优于try-finally

第9项:尽量使用try-with-resources而不是try-finally(Prefer try-with-resources to try-finally)

Java,try-finally 没有捕获