C#异常处理机制初步

异常处理

今天学习了C#的异常处理机制,现将所学总结如下:

一、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);

}

}

}

今天学习了一些异常处理的重要特性,还有许多其它的特性,有待以后努力

时间: 2024-10-27 22:29:09

C#异常处理机制初步的相关文章

Jersey框架的统一异常处理机制分析_java

一.背景 写这边文章源于有朋友问过java中的checked exception和unchecked exception有啥区别,当时我对其的回答是:我编程时仅用RuntimeException.其实,我说句话我是有前提的,确切的应该这么说:在成熟的开发框架下编写业务代码,我只使用或关注RuntimeException.因为,由于框架往往将异常的处理统一封装,这样以便程序员更好的关注业务代码,而业务的一些错误通常是在系统运行期间发生的,因此业务的异常通常被设计为RuntimeException的

JAVA【异常二】异常处理机制

Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮.易于调试.异常之所以是一种强大的调试手段,在于其回答了以下三个问题: 什么出了错? 在哪出的错? 为什么出错? 在有效使用异常的情况下,异常类型回答了"什么"被抛出,异常堆栈跟踪回答了"在哪"抛出,异常信息回答了"为什么"会抛出.   在Java 应用程序中,异常处理机制为:抛出异常,捕捉异常. 抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运

php错误处理和php异常处理机制

php错误处理 当我们开发程序时,有时候程序出现了问题,我们就可以用以下几种办法找出错误. 开发阶段:开发时输出所有的错误报告,有利于我们进行程序调试 运行阶段:我们不要让程序输出任何一种错误报告(不能让用户看到(包括懂技术, 不懂技术的人)) 将错误报告写入日志中 一.指定错误报告 error_reporting = E_LL 二.关闭错误输出 display_errors = Off 三.开启错误日志功能 log_errors = On 1. 默认如果不指定错误日志位置,则默认写WEB服务器

PHP 5.0异常处理机制深度探索

异常处理    本文面向希望了解PHP5异常处理机制的程序员.阅读本文你需要具有一定面向对象编程和PHP基础. PHP5内建的异常类需要有以下成员方法: __construct()构造函数,需要一个出错信息和一个可选的整型错误标记作参数getMessage()取得出错信息 getCode()出错的代码 getFile()异常发生的文件getLine()异常发生的行数 getTrace()跟踪异常每一步传递的路线,存入数组,返回该数组 getTraceAsString()和getTrace()功能

Java异常处理机制

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你用System.out.println(5/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常. 有些异常需要做处理,有些则不需要捕获处理,在下面会详细讲到. 天有不测之风云,人有旦夕祸福,Java的程序代码也如此.在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免.不可预测的情况则应考虑异常发生时如何处理. 而在Java中的异常用对象来表示

php错误处理以及php的异常处理机制

php错误处理 当我们开发程序时,有时候程序出现了问题,我们就可以用以下几种办法找出错误. 开发阶段:开发时输出所有的错误报告,有利于我们进行程序调试 运行阶段:我们不要让程序输出任何一种错误报告(不能让用户看到(包括懂技术, 不懂技术的人)) 将错误报告写入日志中 一.指定错误报告 error_reporting = E_LL 二.关闭错误输出 display_errors = Off 三.开启错误日志功能 log_errors = On 1. 默认如果不指定错误日志位置,则默认写WEB服务器

全面解析Oracle developer的异常处理机制

Oracle developer以其快速的数据处理开发而闻名,其异常处理机制也是比较完善,不可小觑. 1. 异常的优点 如果没有异常,在程序中,应当检查每个命令的成功还是失败,如 BEGIN SELECT ... -- check for 'no data found' error SELECT ... -- check for 'no data found' error SELECT ... -- check for 'no data found' error 这种实现的方法缺点在于错误处理没

为你的网站定制一套统一的异常处理机制

写过程序的人都知道,再好的程序都可能存在未能处理的异常情况,因为程序运行的环境和人员的操作方式可以说是千差万别,开发人员在一开始很难把所有的情况都想到,并做相应的处理.所以,开发人员才需要配合测试人员进行协同工作,目的就是尽量较少和消灭(完全消灭当然只是理想情况了)程序中的错误,处理尽可能多的异常情况.在各种应用程序中,网站面临的挑战可以说是各类程序中比较大的了.为什么这么说呢?原因很简单,一个网站的用户千差万别,用户习惯各不相同,用户所使用的电脑和软件平台也各异,网络环境更是大相径庭,所以网站

全面掌握Java的异常处理机制

你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 . OutputStreamWriter out = ... 2. java.sql.Connection conn = ... 3. try { 4. Statement stat = conn.createStatement(); 5. ResultSet rs = stat.executeQuery( 6. "select uid, name fro