捕获-异常 C#

关注我,为您分享C#技术分享

异常解释

为了让用户体验更好,为了程序即使出错也不瘫痪。

问题:

1.)我们需要用户输入一个整型,用户真的就输入了一个整型吗?

2.) 如果这个整型太大了或者太小了,怎么办?

例如:

string s;

int i;

s = “用户输入”;

i = int.Parse(s);

异常是指程序本身没有错,而在运行中发生的错误:

1.)用户输入错误引发

2.)数据库连不上

3.)其它因为运行环境导致错误

常见异常:

1.)被零除

2.)算术溢出

3.)访问数组越界

4.)对象引用为空

5.)找不到文件

try/catch块处理异常

当代码段有可能发生异常的时候,我们应该把该代码段放置在try中,捕获到异常后的处理方法放置在catch中。

运行结果:

代码示例:

try

{

int x = int.Parse(tb_1.Text);

int y = int.Parse(tb_2.Text);

int result;

switch (cb_yunsuanfu.Text)

{

case"+":

result = x + y;

break;

case"-":

result = x - y;

break;

case"*":

result = x * y;

break;

case"/":

result = x / y;

break;

default:

result = 0000;

break;

}

lb_result.Text = result.ToString();

if (result > 10)

{

thrownew ApplicationException("亲,我不喜欢大于10");

}

}

catch (FormatException fe)

{

MessageBox.Show(fe.Message);

//MessageBox.Show("您输入有误,请核对后重新输入!");

return;

}

catch (OverflowException ofe)

{

MessageBox.Show(ofe.Message);

return;

}

catch (DivideByZeroException dbe)

{

MessageBox.Show(dbe.Message);

return;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

return;

}

finally

{

MessageBox.Show("无论错还是对,都必须执行我");

}

异常处理的系统流程:

必须正确的排列捕获异常的catch子句,范围小的exception放在前面的catch子句,即如果exception之间有继承关系,把子类放在前面的catch子句中,把父类放到后面的catch子句中

finally关键字:

确保一些收尾工作,finally段里的语句总在try or catch之后执行

finally

{

MessageBox.Show("无论错还是对,都必须执行我");

}

throw关键字:

类中可以抛出异常,不返回错误代码,不输出错误信息

if (result > 10)

{

thrownew ApplicationException("亲,我不喜欢大于10");

}

异常处理的特点:

1.)在应用程序遇到异常情况(如被零除情况或内存不足警告)时,就会产生异常。

在可能引发异常的语句周围使用try块。

2.)try块中发生异常后,控制流会立即跳转到关联的异常处理程序(如果存在)。

3.)如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误消息。

4.)如果catch块定义了一个异常变量,则可以使用它来获取有关所发生异常的类型的更多信息。

5.)可能导致异常的操作通过try关键字来执行。

6.)异常处理程序是在异常发生时执行的代码块。在C#中,catch关键字用于定义异常处理程序。

7.)程序可以使用throw关键字显式地引发异常。

8.)异常对象包含有关错误的详细信息,比如调用堆栈的状态以及有关错误的文体说明。

9.)即使引发了异常,finally块中的代码也会执行,从而使程序可以释放资源。