C# 异常之try、catch、checked、unchecked、throw、finaelly

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44800780/article/details/102680526

尝试执行代码和捕捉异常

C#支持异常和异常处理程序,可以很容易地区分程序主逻辑的代码与处理错误的代码。
要想写支持异常处理的应用程序,要做下面两件事:
1.把代码放到try块中。代码运行时,会执行try块内的所有语句。如果没有任何异常,这些语句将一个个执行,直到全部执行完毕.

2.写完代码块后,要写一个或多个catch处理程序来处理可能发生的错误。每个catch处理程序都捕捉并处理特定类型的异常。
一个例子如下:
在这里插入图片描述

未处理的异常

如果try块抛出异常,但没有对应的catch处理程序,那么会发生什么?
在这里插入图片描述
可以看到int.Parse会抛出OverflowException异常,而catch处理程序目前只能捕捉FormatException异常,由于找不到匹配的catch处理程序,整个程序终止,报告发生了未处理的异常。

使用多个catch处理程序

不同错误可能抛出不同类型的异常。为了解决这个问题,可以提供多个catch处理程序
在这里插入图片描述

捕捉多个异常

FormatExceptionOverflowException都继承于SystemException,而SystemException又继承于Exception,所以捕捉Exception相当于捕捉所有可能发生的异常
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果异常与try块之后的多个catch处理程序匹配会发生什么?
假如一个处理程序捕捉FormatException,另一个捕捉Exception,最终运行哪一个?

异常发生后将运行由“运行时”法线的第一个匹配的异常处理程序,其他处理程序会被忽略。


Checked和unchecked整数运算

C#的int是32位大小,取值范围是 -2147483648~2147483647
在代码中可用checkedunchecked关键字选择性打开和关闭程序一个特定部分的整数溢出检查.

编写checked语句

在这里插入图片描述
checked语句是以checked关键字开头的代码块。
checked语句中的任何整数运算溢出都抛出OverflowException异常.

编写unchecked语句

在这里插入图片描述
unchecked关键字创建强制不检查溢出的代码块。永远不抛出OverflowException异常.

check表达式

在这里插入图片描述
注意:不能使用checked和unchecked关键字控制浮点运算。
checked和unchecked关键字只适合int和long等整型运算。
浮点运算永远不抛出OverflowException异常。



抛出异常

假如要实现一个星期名称的方法,接受int参数并返回对应的星期名称,比如int参数为1,返回Monday,2返回Tuesday.
假如传递的整数小于1或大于7,这个时候怎么办呢?
这种情况最好抛出异常,用throw语句抛出异常,如下例所示:
在这里插入图片描述
在这里插入图片描述

throw表达式

可用throw表达式加一个?:操作符简化代码,?:操作符相当于针对一个表达式的if…else语句。它要获取三个操作数:
条件?第一个表达式 :第二个表达式
首先求值条件,如果为true就求值第一个表达式,如果为false
就求值第二个表达式。
用法类似如下
在这里插入图片描述

finally块

finally块,放到其中的语句总是运行(无论是否抛出异常)
finally块要么紧接在try块之后,要么紧接catch块之后,只要程序进入与finally块关联的try块,finally总是运行,即使发生异常

猜你喜欢

转载自blog.csdn.net/qq_44800780/article/details/102680526