异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。
异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。
- try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。
- catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。
- finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
- throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。
(一):异常的编程的三种结构
1:捕获异常(try_catch)
try { Console.WriteLine("请输入分母:"); int n = Convert.ToInt32(Console.ReadLine()); double result = 100 / n; Console.WriteLine("结果为:" + result); }catch(DivideByZeroException){ // 输入0 Console.WriteLine("分母不能为0"); }catch(FormatException){ // 格式异常 Console.WriteLine("格式错误"); }
这里需要说明一下:catch是可以没有参数的,没有参数就是捕获一切异常。
如果需要知道是因为什么错误导致的异常,就需要带参数。
2:收尾工作(try_catc_finally)
try { Console.WriteLine("请输入分母:"); int n = Convert.ToInt32(Console.ReadLine()); double result = 100 / n; Console.WriteLine("结果为:" + result); } catch (DivideByZeroException) { // 输入0 Console.WriteLine("分母不能为0"); } catch (FormatException) { // 格式异常 Console.WriteLine("格式错误"); } finally { // 无论是否发生异常,都会走进这里。 Console.WriteLine("我是finally模块"); }
3:抛出异常(throw)
try { Console.WriteLine("请输入分母:"); int n = Convert.ToInt32(Console.ReadLine()); if( n > 10){ // 手动抛出异常 throw new IndexOutOfRangeException(); } double result = 100 / n; Console.WriteLine("结果为:" + result); }catch(IndexOutOfRangeException e){ // 接收手动抛出的异常,并显示 //Console.WriteLine("你输入的整数超出了范围"); Console.WriteLine(e.Message); // 显示出错信息 Console.WriteLine(e.StackTrace); // 显示出错位置 } catch (DivideByZeroException e) { // 输入0 Console.WriteLine("分母不能为0"); } catch (FormatException e) { // 格式异常 Console.WriteLine("格式错误"); } finally { // 无论是否发生异常,都会走进这里。 Console.WriteLine("我是finally模块"); }
(二):.NET中的异常类
这部分请百度搜索MSDN。
(三):异常类的属性
Console.WriteLine(e.Message); // 显示出错信息 Console.WriteLine(e.StackTrace); // 显示出错位置
等等……
(四):自定义异常
// 自定义异常 class NegativeNumberExeption : ApplicationException { // 默认输出 public NegativeNumberExeption() : base("自定义异常:非法操作"){}//对基类构造函数的赋值 // 有参数输出 public NegativeNumberExeption(string message) : base(message){} }