A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 殘遛の丶狳味 中级黑马   /  2013-8-16 22:18  /  1193 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Try catch是不是任何异常都能处理啊?

1 个回复

正序浏览
异常有两种:一种是执行程序中产生的异常,另外一种是公共语言运行库(CLR)中生成的异常。
在C#中,基类库定义了多个类,每个类代表一个指定的异常类型。发生异常时,CLR会创建该类型的异常对象 and 寻找适当的catch语句处理异常。还有就是,所有的异常类都是派生自System.Exception这个类。

当使用catch语句来处理异常时,通常有三种形式:
(1)catch
{异常处理代码} //一般的catch子句,可接收任何异常,但不能确定发生的异常类型。
(2)catch (ExceptionType)
{异常处理代码} //特定的catch子句,将一个异常类的名称如IndexOutOfRangeException(错误地对数组索引)作为参数,使用时只能匹配与其相同类型的异常
(3)catch (ExceptionType ex)
{异常处理代码} //带特定对象的catch子句,能提供最多关于异常的信息。它首先匹配该指定类的异常,或派生自它异常类的异常,并且给出一个异常实例的异常变量ex,通过ex的属性可以查看更多关于异常的信息。

在异常发生之后,系统会按顺序查找catch子句的列表,首先匹配到该异常对象类型的catch子句被执行。
如果异常没有在try块中产生,或者try块中没有匹配的异常处理程序,那么异常沿着栈向上传递,在这个过程中系统会再去匹配有没有异常处理的代码处理块。如果很不幸的是还没有找到,应用程序就会say oops,跳出!

所以catch块并不能hold住所有的异常,只要是Exception类或者是继承自它的异常类都是可以收住的,其他的那些个unknown的异常,实在不敢接!

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马