C# 中的异常捕获和处理

来源:互联网 发布:win10右下角网络红叉 编辑:程序博客网 时间:2024/06/06 11:34
异常是程序运行中发生的错误,异常处理是程序的一部分,错误的出现并不总是编写应用程序员的原因,有事应用程序会因为终端用户的操作而发生错误。无论如何,在编写程序前都应该预测应用程序和代码中出现的错误。
三种异常的处理语句
1.try ... catch //捕获异常
2.try ... finally //清除异常
3.try ... catch ... finally // 处理所有异常

捕获异常:
try
{
//包含容易产生异常的代码
}
catct(异常类 ,异常实例对象)
{
//异常处理代码
}
namespace 捕获异常{class Program{static void Main(string[] args){//利用 try catch 语句捕获数组越界问题int[] arr = { 0, 1, 2, 3, 1, 2, 3, 3, 4, 5 };try{for (int i = 0; i <= arr.Length; i++){Console.Write(arr[i] + " ");}}catch(Exception myex){//Message.Tostring()中的Message是获取描述当前异常消息Console.WriteLine(myex.Message.ToString());}//此语句虽然可以给出异常提示,并不能智能描述异常的原因//catch { Console.WriteLine("发生异常"); }Console.ReadKey();}}}


用户不能获得对异常对象的访问,而该对象含 有重要的出错星星,也就不能得到出错的信息。

清除、处理所有异常
如果用户对产生错误不进行处理,而消除产生的错误分配的资源
try
{
// 包含容易产生异常的代码
}
finally
{
//用于消除try 块中分配的任何资源以及 运行任何即使在发生异常时也必须执行的代码
}

最好的组合,合并两种错误处理技术,即捕获错误、消除并继续执行应用程序
try
{
//包含容易产生异常的代码
}
catct(异常类 ,异常实例对象)
{
//异常处理代码
}
finally
{
//用于消除try 块中分配的任何资源以及 运行任何即使在发生异常时也必须执行的代码
}
注意:处理异常会大大地降低性能,不妥将他用在控制正常程序流程中,如采用有可能检测到代码中 导致异常的状态,请执行这种操作。 不妥在处理该状态之前捕获异常本是,如除一个数时,可通过if先判断数据不等0,然后在进行相除。

引发异常
在编写程序是,有事肯要引发异常,以便捕获异常
引发异常的格式为:
throw new 异常类(异常信息);
异常类 :预定义,自定义
异常信息:字符串“格式转换错误”
实例 :
为Program 类定义一个将字符串转换成整数的私有静态方法StringToInt;它含有一个字符串类型参数,返回一个整数,然后通过这个使用方法将一个不能转换成整数的字符串转换成整数故而引发异常,
namespace 引发异常{class Program{private static int StringToInt(string mystr) {int outnum = 0;try{outnum = Convert.ToInt32(mystr);return outnum;}catch{throw new FormatException("格式不正确(自己写的)");}}static void Main(string[] args){string str = "51zxw";try{Console.WriteLine(StringToInt(str));}catch(FormatException ex){Console.WriteLine(ex.Message.ToString());}Console.ReadKey();}}}


预定义异常类

异常类说明Exception所有异常对象的基类SystemException运行时产生的所有错误的基类IdexOutOfRangeExceptiom当数组的下标超出范围时运行时引发NullRefereceException当一个空对象被引用时运行时引发ArgunmentException所有参数异常的基类InvalidCastException类型的显示转换在运行是失败时,就会引发异常ArrayTypeMismathException当存储一个数组是,如果由于被存储的元素实际类型与数组的实际类型不兼容而导致存储失败就会引发此异常ArithmeticException算术运算期间异常发生的基类DivideByZeroException试图除以0引发OverflowException溢出时引发FormatException参数格式无效是引发

自定义异常类
C#语言虽然预定义了许多异常类,但是,在有些场合,创建自己的异常类可能会方便。自定义异常类是通过继承System.Excetion类来创建自己的异常

声明异常的格式:
class 自定义的异常了吗:Exception{}
引发异常格式
throw(自定义异常类名)
原创粉丝点击