美文网首页
Lession13 调试和异常处理

Lession13 调试和异常处理

作者: 任人渐疏_Must | 来源:发表于2021-06-16 08:41 被阅读0次

异常处理

//语法上没有错误,在程序运行的过程中,由于某些原因程序出现错误,不能正常运行
    // 在你的代码中应该经常使用try-catch来进行异常捕获
    // 哪行代码有可能出现异常,你就try一下
    /*
     * try catch之间不允许有其他代码
     * try
     * {
     *   可能会出现异常的代码
     * }
     * catch
     * {
     *   出现异常后要执行的代码
     * 
     * }
     * finally
     * {
     * 
     * }
     * 
     * 执行过程:如果try中的代码没有出现异常,那么catch中代码不会执行。
     * 如果try中的代码出现异常,哪怕这行出现异常的代码后面有一百行都不会执行了
     * 而是直接跳到catch中执行代码
     * 
     */
    class Program
    {
        static void Main(string[] args)
        {
            bool b = true;
            int number = 0;
            Console.WriteLine("请输入一个数字:");
            //当try块中某行代码发生异常后,从该行代码开始后面的代码都不会继续执行了
            //程序直接调转到catch块中进行
            try
            {
                Console.WriteLine("----------------------------");
                number = int.Parse(Console.ReadLine());
                Console.WriteLine("=================================");
            }
            catch(Exception ex)
            {
                //console.writeline("您输入的类型有误!");
                Console.WriteLine(ex.Message);
                b = false;
            }
            finally
            {
                //finally块中代码,无论是否引发异常,都会执行,不允许出现return 
                Console.WriteLine("######################################");
            }


            if (b)
            {
                Console.WriteLine(number*2);
            }
            
            Console.ReadKey();
        }
    }


catch的几种写法

class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int n = 10, m = 0;
                int r = n / m;
                Console.WriteLine(r);
            }
            //第三种,对不同的异常,使用不同的方式来处理(使用多个不同的catch块来捕获异常)
            catch (NullReferenceException e)
            {
                //空指针异常
                Console.WriteLine("空指针异常:{0}", e.Message);
            }//[dɪˈvaɪd]
            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);
            }


            //第一种:这种写法可以捕获try块中的所有异常
            //catch 
            //{
            //    Console.WriteLine("发生异常了");
            //}
            //第二种:这种写法可以捕获try块中的所有异常,但这个有参数,异常信息可以更详细
            //catch (Exception ex)
            //{
            //    Console.WriteLine(ex.Message);//发生异常的消息
            //    Console.WriteLine(ex.Source);//导致发生异常的应用程序或者对象名称
            //    Console.WriteLine(ex.StackTrace);//发生异常的跟踪信息,哪个文件,第几行,哪个代码
            //}
            Console.ReadKey();
         
        }
    }

自行引发异常throw

 class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                try
                {
                    Console.WriteLine("请输入一个人名:");
                    string name = Console.ReadLine();
                    if (name == "黄鹏")
                    {
                        //建议,这个方式我们应该尽量用if判断规避异常,除非必须得用了,再用,异常本身比较损耗资源
                        //手动抛出异常
                      //throw new Exception("不能输入这个名字");
                       throw new MyException("不能输入这个名字");
                    }
                    else
                    {
                        Console.WriteLine("名字合法,{0}",name);
                    }
                }
                catch (MyException ex)
                {

                    Console.WriteLine("发生异常了");
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                }
            }
        }
    }
   //自定义异常类
    public class MyException : Exception
    {
        public MyException(string message) : base(message)
        {
        }
    }

思考题

  class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("111111111111111111111111");
                //int n = 10, m = 0;
                //int r = n / m;
                Console.WriteLine("2222222222222222222222222");
                return;
            }
            catch (Exception)
            {

                Console.WriteLine("3333333333333333333333333333");
            }
            finally
            { 
                Console.WriteLine("44444444444444444444444444444");
               Console.ReadKey();
            }
            Console.WriteLine("55555555555555555555555555555555555");
            Console.ReadKey();
        }
    }

应用程序示例

class Program
    {
        //检查邮箱是否合法
        public static bool CheckEmail(string email)
        {

            string[] arrString = email.Split("@");
            //如果输入的Email不能被@分成两部分则抛出异常
            if (arrString.Length != 2)
            {
                throw new EmailErrorException("电子邮箱@符错误");
            }
            else
            {
                //找邮箱中.的位置
                int index = arrString[1].IndexOf(".");
                //如果找不到. 或者最后一位是.的话
                if (index == -1 || index == arrString[1].Length - 1)
                {
                    throw new EmailErrorException("电子邮箱点号错误");
                }
            }
            //如果没问题,返回true
            return true;
        }

        static void Main(string[] args)
        {
          
            Console.WriteLine("请输入你的邮箱:");
            string email = Console.ReadLine();
            if (email.Length==0)
            {
                Console.WriteLine("信息不完整!");
                return;
            }
            try
            {
              CheckEmail(email);
            }
            catch (EmailErrorException e)
            {
                Console.WriteLine("格式错误:{0}", e.Message);

            }

            Console.WriteLine("你填的邮箱地址是:{0}", email);
            Console.ReadKey();
        }
    }

 
    //自定义异常类
    public class EmailErrorException:Exception
    {
        public EmailErrorException(string message) : base(message)
        {
        }
    }

调试

/*
           * 程序调试:
           * 1.写完一段程序后,想看一下这段程序的执行过程。
           * 2.当你写完这段程序后发现程序并没有按照你想想的样子去执行
           * 
           * 调试方法:
           * 1.F11逐语句调试(单步调试)
           * 2.F10逐过程调试
           * 3.断点调试
           * 
           * 局部变量:显示当前正在运行的方法中的局部变量的值
           * 步骤,开启断点->运行->调试->窗口->局部变量
           * 监视:开启断点->运行->调试->窗口->监视
           * 即时:运行->全部中断->窗口->即时  :要查找的值,必须在前面加个"?"   按回车键 出结果
           * 快速监视:调试->快速监视 :写上要监视的变量,添加即可
           * 
           */

相关文章

网友评论

      本文标题:Lession13 调试和异常处理

      本文链接:https://www.haomeiwen.com/subject/uaimeltx.html