关于C#中的异常处理

什么是异常?也就是在程序运行过程中会出现错误。

那么就可能有人会问,vs中出现错误不是会报错吗?

首先,vs会报错的基本都是语法错误,但是逻辑错误vs并不会提示错误。只要是符合语法,vs在编译之前都会通过。其次,编写程序的过程中,出现错误是难免的,所以我们需要编写的是更加强壮的代码,来预防以及尽可能地避免程序发生错误。

在C#中,常用try-catch-finally来进行异常的处理。try-catch语句结构如下:

try{ ...; }

catch (...;) { ...;}

finally{ ...;}

其中,catch可以有多个catch语句,finally语句可有可无。

try中放置可能会出现错误异常的代码。在catch中放置错误的类型以及假使出现了错误,该如何处理或者什么提示信息,finally中的代码是不管代码出不出现异常都会被执行的。

下面通过一个小实验更好的理解异常处理。

编写如下实验代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _1
{
    class Program
    {
        static void Main(string[] args)
        {

            int[] a= { 1, 2, 3 };
            int m;
            try
            {
                m = a[3];
            }
            catch 
            {
                Console.WriteLine("变量m出现了数组访问过界的异常,执行了catch中的语句");
            }
            finally
            {
                Console.WriteLine("这是finally中的语句");

            }

            Console.WriteLine("这是try-catch-finally之外的语句");

            Console.ReadKey(true);
            }
        }
    }

运行结果如下:

 使用try-catch语句之后,由于try中确实发生了异常,所以会执行catch中的异常处理语句,而finally中的语句并不会受到影响。

而假如没有try-catch语句,运行结果如下:

 可以发现后面的语句根本不会输出,程序也会被中断。

异常处理练习题:

 编写代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _1
{
    class Program
    {
        static void Main(string[] args)
        {
            float a = 0, b = 0;
            label:   //定义书签label  方便goto跳转
            Console.WriteLine("请输入2个数字:");

            try
            {
               a = Convert.ToInt32(Console.ReadLine());
               b = Convert.ToInt32(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("您输入的不属于数字!");
                goto label;  //如果发生错误就让用户重新输入
            }
            float sum=a+b;
            Console.WriteLine("结果是:"+sum);

            Console.ReadKey(true);
            }
        }
    }

程序运行结果如下:

最后,对于finally:什么情况下需要加入finally?

答:比如链接数据库可能会出现异常,但是建立数据库连接通道,这些资源是会占用内存的,如果发现了连接异常,那么后面的关闭资源的代码就不会被执行,那么finally里面就可以放入这些资源关闭的代码。

总而言之,用try-catch语句可以预防错误的发生,增强程序的鲁棒性。

猜你喜欢

转载自blog.csdn.net/qq_51196701/article/details/122967123