济南做网站公司,电脑上无法安装wordpress,扬州做网站哪家好,制作asp手机网站C# 入门基础知识 - C# 处理程序异常相关技术 第11节 处理程序异常相关技术11.1 捕获异常11.2 清除、处理所有异常11.3 引发异常11.4 预定义异常类11.5 自定义异常类 更多C#基础知识点可查看#xff1a;C#学习笔记 - C#基础知识 - C#从入门到放弃
第11节 处理程序异常相关技术… C# 入门基础知识 - C# 处理程序异常相关技术 第11节 处理程序异常相关技术11.1 捕获异常11.2 清除、处理所有异常11.3 引发异常11.4 预定义异常类11.5 自定义异常类 更多C#基础知识点可查看C#学习笔记 - C#基础知识 - C#从入门到放弃
第11节 处理程序异常相关技术
三种异常处理语句 ① try...catch //捕获异常 ② try...finally //清除异常 ③ try...catch...finally //处理所有异常
11.1 捕获异常
try…catch语句 try...catch语句是最常见的异常处理技术。它允许我们在可能引发异常的代码块中捕获和处理异常。try块用于放置可能引发异常的代码而catch块用于捕获和处理特定类型的异常。 语法示例
try
{// 可能引发异常的代码// ...
}
catch (ExceptionType1 ex)
{// 处理异常类型1
}
catch (ExceptionType2 ex)
{// 处理异常类型2
}【代码示例】 //利用try...catch语句来捕获数组的越界问题int[] intArray { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };try{for (int i 0; i intArray.Length; i)Console.Write(intArray[i] );}catch(Exception myex){Console.WriteLine(\n程序出现异常myex.Message);//Console.WriteLine(myex.Message.ToString());}Console.ReadKey();运行程序
0 2 4 6 8 10 12 14 16 18 20
程序出现异常索引超出了数组界限。11.2 清除、处理所有异常
finally块 finally块用于指定无论是否发生异常都要执行的清理代码。无论是否发生异常finally块中的代码都会被执行。通常情况下在finally块中进行释放占用资源或确保某些操作完成的操作。 语法示例
try
{// 可能引发异常的代码
}
finally
{// 清理代码
}此语法可以处理异常但是无法看见任何异常信息所以可以结合catch语句组合成以下语法
try
{// 可能引发异常的代码
}
catch (Exception ex)
{// 处理异常
}
finally
{// 清理代码
}【代码示例】 int[] intArray { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };try{for (int i 0; i intArray.Length; i){int temp 720 / intArray[i];Console.WriteLine(720÷{0}{1}, intArray[i], temp);}}catch(Exception myex){Console.WriteLine(myex.Message);}finally{Console.WriteLine(无论是否发生异常此finally语句块中代码都会被执行。);}Console.ReadKey();运行程序
尝试除以零。
无论是否发生异常此finally语句块中代码都会被执行。11.3 引发异常
throw语句 throw语句用于手动引发异常。可以使用throw语句在代码中显式引发异常对于创建自定义异常或重新引发现有异常时非常有用。
【示例】 定义一个将字符串转换为整数的私有静态方法ConvertStringToInt它含有一个字符串类型参数返回一个整数然后使用方法将一个不能转换成整数的字符串转换成整数从而引发异常 private static int ConvertStringToInt(String mystr) class Program{private static int ConvertStringToInt(string mystr){int outnum 0;try{outnum Convert.ToInt32(mystr);return outnum;}catch{throw new FormatException(Eorr格式转换 不正确);}}static void Main(string[] args){//string mystr 123; //123string mystr hao123; //Eorr格式转换 不正确try{int myint;myint Program.ConvertStringToInt(mystr);Console.WriteLine(myint);}catch(FormatException exf){Console.WriteLine(exf.Message);}Console.ReadKey();}}11.4 预定义异常类
在C#中有许多预定义的异常类它们分别用于表示不同类型的异常情况。以下是一些常见的预定义异常类的简要介绍
异常类说明ExceptionException是所有异常类的基类它表示通用的异常情况。一般情况下我们不直接使用Exception类而是使用它的子类。SystemExceptionSystemException是Exception的子类它代表由.NET框架或CLR引发的异常。例如NullReferenceException和DivideByZeroException都是SystemException的子类。ApplicationExceptionApplicationException是Exception的子类它代表由应用程序代码引发的异常。通常我们可以通过自定义的方式来创建派生自ApplicationException的自定义异常类。ArgumentExceptionArgumentException代表参数异常表示一个或多个方法参数不符合预期。它有一些常见的子类如ArgumentNullException参数为nullArgumentOutOfRangeException参数超出有效范围等。InvalidOperationExceptionInvalidOperationException表示在对象的当前状态下操作是无效的或不合理的异常。这个异常通常在对象的状态不允许执行某个操作时引发。IndexOutOfRangeExceptionIndexOutOfRangeException表示索引超出范围的异常通常在数组或集合访问时发生。NullReferenceExceptionNullReferenceException表示空引用异常当尝试通过对null引用进行成员访问、方法调用或属性访问时会引发此异常。DivideByZeroExceptionDivideByZeroException表示除以零的异常当对一个数字类型进行除法运算时除数为零时会引发此异常。
【部分异常类示例】 1、ArgumentException static int DivideByTwo(int num){if (num % 2 1)throw new ArgumentException(此处必须为偶数, num);return num / 2;}static void Main(string[] args){//ArgumentException异常try{Console.WriteLine(DivideByTwo(9));}catch(ArgumentException exa1){//Console.WriteLine(9不能被2整除);Console.WriteLine(exa1.Message);}Console.ReadKey();}运行结果
此处必须为偶数
参数名: num2、InvalidCastException //2、InvalidCastException 异常bool myBool true;try{char myChar Convert.ToChar(myBool);}catch(InvalidCastException exi){Console.WriteLine(exi.Message);}运行程序
从“Boolean”到“Char”的强制转换无效。3、ArrayTypeMismatchException //ArrayTypeMismatchException 异常string[] myStr { Cat, Dog, Pig, Dock };object[] myObj myStr;try{foreach (object outobj in myObj){Console.Write(outobj );Console.WriteLine(outobj.GetType());myObj[1] 13;}}catch (ArrayTypeMismatchException exa2){Console.WriteLine(exa2.Message);}运行程序
Cat System.String
尝试访问类型与数组不兼容的元素。4、OverflowException //OverflowException try{byte myByte Convert.ToByte(Console.ReadLine());Console.WriteLine(myByte);}catch(OverflowException exo){Console.WriteLine(exo.Message);}运行程序
//输入范围内数值
123
123//输入超出范围数值
266
值对于无符号的字节太大或太小。11.5 自定义异常类