C#编程基础 笔记#8异常处理

1、什么是异常?
指程序运行过程中发生的异常事件(不正常事件)
这些事件的组成是由:
a、硬件问题
b、软件问题
异常是可以处理(不是全部)
在C#中将常见的异常封装为一系列的类。使用时直接调用即可。
常见的异常:
1、Exception <----异常的总类(祖先类)
2、SystemException <----系统异常类
3、ArgumentException <----参数异常类
4、ArithmeticException <----算术导致的异常类
5、IOException <----输入输出异常(流的异常)类
6、IndexOutOfRangeException <----索引超出异常(数组索引越界)
7、DivideByZeroException <----除零异常
8、OverflowException <----运算结果过大,超过目标类型的范围。
9、FormatException <----输入字符串格式不正确异常
--------------------------------
为什么要处理异常?
1、对用户来说体验不友好
2、程序会因此死掉,所以未保存的数据就有可能丢失。
3、程序因为未知问题导致数据的丢失。
---------------------
异常的处理不是异常出现后的处理而是预先估算可能出现异常的地方事先做出处理的方式。
C#中处理异常使用的抛接机制?
程序遇到异常会将异常抛出,如果没有处理则继续抛出,直到操作系统收到异常信息做出处理。
如果操作系统没有做出异常的处理那么就会导致系统的死机。因此现在的操作系统对于程序抛出的异常一般都是直接杀掉异常程序的进程从而保证操作系统的正常运行。
那么在C#语言中提供了抛接机制来处理异常
语法:
try
{
//异常代码预估
}catch(异常类型 异常变量)
{
//异常处理代码
}
将可能发生异常的代码放到try的模块中进行测试,一旦代码出现了异常则下面得catch模块会主动拦截并程序的流程转向到此处进行处理,这样一来异常的代码就被处理了。所以就不会把程序的异常抛给操作系统处理,由于已经处理了异常所以程序就可继续运行或是正常退出。这样就保证了程序的健壮性。
catch后面的小括号中的内容并不是必须的,可以没有小括号,但是如果没有小括号也就不能得到异常的信息。如果你需要异常的信息用来判断究竟是什么异常时,异常信息就会告诉你。这样我们就可以有针对性的处理。
=========================
ps:.net 4.7.2版本认为除零是正无穷大(此种情况是数据类型为double时出现)
当整数进行除零时出现除零的异常。
================
在使用catch捕捉异常信息时可以根据由进到远的关系来做出多种异常类型的捕捉,
祖先类型:Exception放在最后一个,其他同级别异常没有先后顺序。
================================
从代码中可以看出,异常的捕捉也是一级一级的进行,最后是异常祖先类型。
======================================
以后如果涉及到程序中使用其他的资源这种情况下,一旦发生异常就会导致资源被占用,如果没有很好的处理就会导致资源被锁定了,其他程序将不能访问。
为了解决这个问题C#中提供了finally语句模块用于释放资源。
finally语句的特点:
无论有没有异常发生都将执行finally模块中的释放语句。
finally使用场景:
1、程序中使用了数据库资源
2、程序中使用了文件独占访问资源
3、程序中独占了某个网络的端口
。。。。。
以上这些只要是有使用资源的情况,都需要使用finally进行资源的释放。
=========================================
某些特殊的情况下我们需要人为抛出异常
此时我们使用throw语句来做人为抛出异常
语法:
throw new Exception("异常消息");
finally语句块中不能使用return语句,语法不允许。
哪怕在try块或catch块中使用return语句,如果有finally语句也会跳到此处执行。这是语法规则。也是编译器的规则。

posted @ 2020-06-11 16:44  古砂梦  阅读(33)  评论(0)    收藏  举报