异常提供了一种把程序控制权从某一个部分转移到另一个部分的方式。c#异常处理建立在4个关键词上try,catch,finally,throw。简单来说,在异常处理中,首先需要对可能发生异常的语句进行异常捕捉,try就是用于预测可能出现的异常。catch是捕获异常。throw则会抛出。finally则是无论是否发生异常,都会执行finally里的语句。
【try】:一个try块标识了一个将被激活的特定的异常的代码块,后面跟一个或多个catch块。
【catch】:程序通过异常处理程序捕获异常。catch关键字表示异常的捕获。
【finally】:finally块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常,文件都要被关闭。
【throw】:当问题出现时,程序抛出一个异常,使用throw关键字来完成。
语法
假设一个块将出现异常,可使用try/catch关键字捕获异常。try/catch 块内的代码为要防护的代码,在C++中使用try/catch可以防止因为异常产生的内存泄漏。
try { // 引起异常的语句 } catch (ExceptionName e1) { // 错误处理代码 } catch (ExceptionName e2) { // 错误处理代码 } catch (ExceptionName eN) { // 错误处理代码 } finally { // 要执行的语句 }
C#提供了很多种异常,我们在这里只要掌握最基本的异常Exception就可以了。在catch语句中我们只处理Exception这个最基本的异常。
代码分析
以上代码说明:
1. 25行-41行 我们新建了一个ExceptionTest 方法。在这个方法中要求用户输入一个整数。如果用户输入一个字符串,我们的程序会产生异常。
2. 36行 我们用throw抛出了一个我们自己定义的异常。在里边加入了我们想传递的一些信息。
3. 38行-40行 finally语句是可选的。只有当需要做一些例如资源释放的操作的时候,会很方便。不管有没有异常产生 finally部分都会执行。
4. 13行-21行 调用ExceptionTest方法。同时捕获异常。
5. 15行 如果调用ExceptionTest方法出现异常,这条语句不会执行。否则正常执行。
6. 19行 输出异常的简要信息
7. 20行 输出异常的详细信息。例如出错的代码位置。
运行结果
1、输入一个非数字字符串,产生异常
2. 用户输入整数,程序正常执行
思考
1. 去掉第36行 throw new Exception("转换出现异常");再次查看详细的错误信息,看看哪一行代码出现了问题。想想是什么原因。
2. finally语句一定会执行吗?去掉main方法的try catch 语句,调试一下程序。