[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
Windows开发
> 详细
C#基础知识点之try catch 异常捕获机制
时间:
2015-11-25 23:19:50
阅读:
314
评论:
0
收藏:
0
[点我收藏+]
一、C#的异常处理所用到关键字
try 用于检查发生的异常,并帮助发送任何可能的异常。
catch 以控制权更大的方式处理错误,可以有多个
catch子句。
finally 无论是否引发了异常,
finally的代码块都将被执行。
throw 用于引发异常,可引发预定义异常和自定义异常。
二、C#异常处理的格式
try
{
程序代码块;
}
catch(Exception e)
{
异常处理代码块;
}
finally
{
无论是否发生异常,均要执行的代码块;
}
三、异常处理实战
一个除数和零的简单例子:
public
class DivisorIsZero
{
private
static
void Main()
{
int dividend=10;
int divisor1=0;
int divisor2=5;
int DivideValue;
try
{
DivideValue=dividend/divisor1;
//(1)
//DivideValue=dividend/divisor2; //(2)
System.Console.WriteLine(
"DivideValue={0}",DivideValue);
//(3)这一行将不会被执行。
}
catch
{
System.Console.WriteLine(
"传递过来的异常值为:{0}",e);
}
finally
{
System.Console.WriteLine(
"无论是否发生异常,我都会显示。");
}
}
}
注:(1)行被执行则会抛出一个异常,如果没有
catch语句,程序会异常终止,使用不带参数的
catch子句,则可以捕获任意类型的异常。
如果将(1)行注释掉,启用(2)行,这意味该程序运行时不会出现异常,从输出可知,
finally代码块仍将被执行。
可以给
try语句提供多个
catch语句,以捕获特定的异常,如上例中:0作为除数则会引发DivideByZeroException类型的异常,上例中的
catch语句可以作如下修改:
catch(DivideByZeroException e)
{
System.Console.WriteLine(
"零不能作为除数!异常值为:\n{0}",e);
}
catch(Exception e)
{
System.Console.WriteLine(
"并非\‘‘零作为除数引发的异常\"!异常值为:\n{0}",e);
}
为什么还要加上一个
catch(Exception e)子句呢?原因很简单,
catch(DivideByZeroException e)子句只能捕获特定的异常,
try内的程序代码可能还会产生其它的异常,这些异常只能由
catch(Exception e)来捕获了。
下表给出了一些常见的异常:
System名称空间中常用的异常类
异常类名称 简单描述
MemberAccessException 访问错误:类型成员不能被访问
ArgumentException 参数错误:方法的参数无效
ArgumentNullException 参数为空:给方法传递一个不可接受的空参数
ArithmeticException 数学计算错误:由于数学运算导致的异常,覆盖面广。
ArrayTypeMismatchException 数组类型不匹配
DivideByZeroException 被零除
FormatException 参数的格式不正确
IndexOutOfRangeException 索引超出范围,小于0或比最后一个元素的索引还大
InvalidCastException 非法强制转换,在显式转换失败时引发
MulticastNotSupportedException 不支持的组播:组合两个非空委派失败时引发
NotSupportedException 调用的方法在类中没有实现
NullReferenceException 引用空引用对象时引发
OutOfMemoryException 无法为新语句分配内存时引发,内存不足
OverflowException 溢出
StackOverflowException 栈溢出
TypeInitializationException 错误的初始化类型:静态构造函数有问题时引发
NotFiniteNumberException 无限大的值:数字不合法
四、定义自己的异常类
除了预定义的异常外,我们还可以创建自己的异常,过程比较简单:
一声明一个异常,格式如下:
class ExceptionName:Exception{}
二引发自己的异常:
throw(ExceptionName);
看一个例子:
class IAmSecondGrade:System.Exception{}
//声明异常
class SecondGrade
{
public
static
int mul(
int first,
int second)
{
if(first>100||second>100)
throw
new IAmSecondGrade();
//引发异常
return (first*second);
}
public
static
void Main()
{
int mul_value;
try
{
mul_value=mul(99,56);
System.Console.WriteLine(
"99与56积为:{0}",mul_value);
mul_value=mul(101,4);
System.Console.WriteLine(
"出现异常,这行是不会被执行的。");
}
catch(IAmSecondGrade)
//捕获自定义的异常
{
System.Console.WriteLine(
"我才上二年级,超过100的乘法我不会。嘿嘿,我自定义的异常。");
}
catch(System.Exception e)
{
System.Console.WriteLine(
"非自定义异常。其值为:{0}",e);
}
}
}
C#基础知识点之try catch 异常捕获机制
原文:http://www.cnblogs.com/sl-Blog/p/4996133.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!