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里面用try catch异常处理之后,catch之后的代码也会执行,那还要finally有啥用啊?
第9项:尽量使用try-with-resources而不是try-finally(Prefer try-with-resources to try-finally)