c#基础学习(0719)之异常处理

异常处理的一般代码模式

try
            {
                //可能发生异常的代码
                //当try中某行代码发生异常后,从该行代码开始,后面的代码都不会继续执行,
                //程序直接跳转到catch块中进行执行
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);//可以看到异常的原因
                //对异常的处理
                throw;//继续向上抛出异常
            }
            finally
            {
                //不管是否发生异常都会执行
            }

atch块的几种写法

            try
            {
                int n = 10, m = 0;
                int r = n / m;
                Console.WriteLine(r);
            }
            ////第一种:这种写法可以捕获try块中的所有异常
            //catch 
            //{
            //    Console.WriteLine("发生一场了!");
            //    //throw;
            //}
            ////第二种:
            //catch(Exception ex)
            //{
            //    Console.WriteLine("发生异常了!");
            //    Console.WriteLine(ex.Message);//发生异常的消息
            //    Console.WriteLine(ex.Source);//那个对象中发生异常
            //    Console.WriteLine(ex.StackTrace);//异常相关信息(那个位置第几行第几列)
            //}
            //第三种:对不同的异常,使用不同的方式开处理(使用多个不同的catch块来捕获异常)
            catch(NullReferenceException e)
            {
                //空指针异常
                Console.WriteLine("空指针异常:{0}",e.Message);
            }
            catch(DivideByZeroException e)
            {
                //除数为0的异常
                Console.WriteLine("除数为0的异常,详细信息:{0}",e.StackTrace);
            }
            catch(ArgumentException e)
            {
                //参数异常
                Console.WriteLine("参数异常,详细信息:{0}",e.StackTrace);
            }
            catch(Exception e)
            {
                //捕获其余所有的异常
                Console.WriteLine(e.StackTrace);
            }
            finally
            {
                Console.WriteLine("finally中的代码!!");
            }
            Console.ReadKey();

 手动抛出异常及使用throw继续向上抛出异常

    static void Main(string[] args)
        {
            #region 手动抛出异常
            //while (true)
            //{
            //    //尽量使用逻辑判断来避免异常处理代码
            //    try
            //    {
            //        Console.WriteLine("请输入一个人名");
            //        string name = Console.ReadLine();
            //        if (name == "超哥")
            //        {
            //            //手动抛出异常
            //            throw new Exception("姓名不合法!");
            //        }
            //        else
            //        {
            //            Console.WriteLine("姓名合法:{0}", name);
            //        }
            //    }
            //    catch (Exception ex)
            //    {
            //        Console.WriteLine("发生异常了!!");
            //        Console.WriteLine(ex.Message);
            //        Console.WriteLine(ex.StackTrace);
            //    }
            //}
            #endregion

            #region 异常
            M2();
            Console.ReadKey();
            #endregion
        }
        static void M2()
        {
            Console.WriteLine("===========");
            Console.WriteLine("===========");
            try
            {
                M1();
            }
            catch (Exception)
            {
                Console.WriteLine("M1方法发生异常了!");
                throw;
            }
            Console.WriteLine("===========");
            Console.WriteLine("===========");
        }
        static void M1()
        {
            try
            {
                int n = 10, m = 0;
                int r = n / m;
                Console.WriteLine("结果是:{0}", r);
            }
            catch (Exception)
            {
                Console.WriteLine("捕获了该异常并且已经做了相观的处理!");
                //再catch中使用throw;语句,并且这种用法只能用在catch块中
                //throw:表示将当前异常继续向上抛出。
                throw;
            }
        }

 

posted @ 2018-07-19 17:53  超哥20  阅读(154)  评论(0编辑  收藏  举报