C#中的异常是什么及如何使用?
1、首先从字面意思理解一下,异常就是跟平常状态不一样.程序运行时发生了和正常状态不一样的情况,有人叫Bug!
比如我们做了一个计算器,用户输入一个5除以0. (5/0)
我们小学都学过,除数不能为0,这是错误的.
但如果用户输入5/2,就不会出现错误.
所以,在这种情况下,我们写的这个计算器软件就可能会发生异常.
2、我们严谨一点针对程序员的异常解释.
就是你写一段代码往往需要一些参数和条件才执行这段代码,你预期的参数和条件和实际的参数和条件不吻合. 比如你开发了一个管理系统,你设置的最大金额是100万,但是后来有人输入了1000万,这就是很危险的异常. 和你预期的完全不一样.
3、我们经常看到以下异常,你都可以理解成,这是操作系统底层异常代码处理给你显示出来,当然我们自己也可以抛异常. 和我们接下来C#中的异常处理其实其实完全一样.只不过那个时候,不叫异常,而是通过一个返回值来决定,返回一个数字.


4、拿代码说话,打开我们的编程神器 Visual Studio.
新建一个C#控制台程序.

5、我们写一段这样的代码:
double 被除数 = 5;
double 除数 = 0;
double 商 = 0;
商 = 被除数 / 除数;
Console.WriteLine("{0}/{1}={2}", 被除数, 除数, 商);
Console.ReadKey();
===============================
我用的是visual studio 2013
它给我输出了:5/0=正无穷大.
这是C#内部的异常检测,也是微软公司设计C#的程序员提前给我们写好的异常检测代码,有一段隐藏的代码会检测我们的除数是否为0,如果是0的话,就会弹出这个,当然不同的版本VS可能弹出的也不一样. 因为软件都在升级嘛.

6、那么我们现在自己来写一段异常检测
写一段以下代码,我们按F5来执行这段代码.
double 被除数 = 5;
double 除数 = 0;
double 商 = 0;
if (除数 == 0)
{
throw new Exception("除数不能为0");
}
商 = 被除数 / 除数;
Console.WriteLine("{0}/{1}={2}", 被除数, 除数, 商);
Console.ReadKey();
===========================================
throw是C#中的关键字,它的意思是抛.
new Exception 创建一个异常对象,并且把异常提示的关键字当成参数写进去.
我们自己检查了一下代码,如果除数为0的话,跳出一个异常,后面的代码就不继续执行了.

7、按F5执行我们的代码看看.

8、我们把除数改成2,再按F5,运行程序看看效果.
不错,达到了我们心中预期的效果.
我们可以看到,异常不是每次都弹出,只要除数为0的时候,才会弹出异常.

9、异常的机制是为了保证程序可以一直正常运行!如果我们没有异常机制.
那么我们来写一行代码:
Convert.ToInt32("123");
这一行代码的内部是对我输入的123进行展开.
怎么样展开呢?
1*100+2*10+3.
当然,这是微软的程序员给我们封装好的.
但是我们来思考一下,如果我们自己写Convert.ToInt32.
而不是调用C#里面给我们写好的.
你要把一个文本123转换成数字123是不是用这个方法?
10、如果我们写好 Convert.Toint32这个函数了.
但是用户使用的时候,输入的不是123.
而是Convert.ToInt32("abc");
那怎么办?
你总不能写成 a*100+b*10*+c吧!
所以,在这种情况下,为了告诉你输入错误,就会抛一个异常给你,程序运行到这里就停止了,如果不处理的话,程序就死了.
出现异常位置的地方,后面的任何代码都不会执行.

11、那么我们怎么来解决这个问题呢!
按照以下代码.
但我们除数不为0正常的时候,软件就会正确执行try里面的代码.
try{}里面代表可能会出错的异常代码.
但是如果为0的话,直接就会
进入catch(){},而异常后面的代码将不再执行.
try代表尝试是否有异常.
catch代表如果有异常,我就抓住.
并且把异常赋值给ex
然后把具体的异常信息显示出来.
也就是ex.Message/
