C#编程入门_异常处理_16

来源:互联网 发布:唐诗草木知春不久归 编辑:程序博客网 时间:2024/05/21 12:20

21篇C#博客的配套源码
异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种积极的响应,从而达到程序具有更有健壮性,尽量的避免程序中的死机现象。比如尝试除以零,数组超出索引,字符串格式异常等。
异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。

try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。
catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。
finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。

try{   // 可能引起异常的语句}catch( ExceptionName e1 ){   //关于e1异常的处理}catch( ExceptionName e2 ){   //关于e2异常的处理}catch( ExceptionName eN ){   //关于eN异常的处理}finally{   // 要执行的语句   //一般用来处理关系文件流或者关闭数据库操作   //该模块是统一的出口 如果显示的写出来 那么是必定要执行的}

以上的catch捕获异常是可以并列存在的,但是需要注意的是,处于上面的异常和下面的最好没有什么关系,或者处于上面的异常是下面的一个子类。否则编译器会报错。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 异常{    class Program    {        static void Main(string[] args)        {            int num = 0;            string numStr = string.Empty;            try            {                Console.WriteLine("请输入一个整数");                numStr = Console.ReadLine();                num = int.Parse(numStr);            }            catch (OverflowException e)//输入的数据大于int类型的最大值的时候            {                //打印出异常信息                //Console.WriteLine(e.Message + " " + numStr);                //打印异常信息所在的文件及行数                //Console.WriteLine(e.StackTrace);                //类型超出范围的处理办法                num = 1000;            }            catch(FormatException e) //输入的字符串格式错误的时候捕捉            {                //格式化输入异常的处理办法                num = 2000;            }            catch (Exception e) //捕捉咩有考虑到的其他异常            {                Console.WriteLine("其他异常");                //其他异常的处理方案            }            Console.WriteLine("这个数字是:{0}",num);        }    }}

【注意】
异常处理的核心是try和Catch。这些关键字共同起作用,不能编写没有try的catch。一个try可以关联多个catch子句。
a、 不带参数的catch和catch(Exception)是有区别的
catch(Exception)可以捕获所有以Exception类派生的异常,而不带参数的catch可以捕获所有异常,不管异常是不是从Exception类派生。
b、与catch配套的catch和finally是可选的,但二者必选其一。一个try可对应多个catch,但一个try只能对应一个finally。
c、不论try中是否发生异常,finally中的语句一定会被执行。


finally关键字

1.捕获例外的最后一步是通过finally语句为例外处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理。
2.无论try所指定的程序块中是否抛出例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。(finally语句与switch中的default语句是不同的!)
3.通常在finally语句中可以进行资源的清除工作,如关闭打开的文件、删除临时文件等。


finally和return的关系:

1.当try和catch中有return时,finally仍然会执行;
2.finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码如何修改,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;
3.finally中不可以有return,否则语法错误
参考代码如下

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 异常处理的执行顺序{    class Program    {        static void Main(string[] args)        {            Console.WriteLine(Test());         }        static int Test()        {            int number = 1000;            try            {                int num1 = 100;                int num2 = 1;                number = 2000;                Console.WriteLine("number="+number);                return number;            }            catch (Exception)            {                Console.WriteLine("异常发生了");                number = 3000;                Console.WriteLine("number=" + number);            }            finally            {                Console.WriteLine("finally");                //finally  一般是用来关闭数据库  或者  文件流等操作                number = 4000;                Console.WriteLine("number=" + number);            }            return number;        }    }}