【C#基础知识点】——异常捕获

异常

语法上没有错误,在程序运行的过程当中,由于某些原因程序出现了错误,不能再正常的运行。

异常捕获

在写程序的过程中会经常出现各种各样的异常,如果想要程序继续运行,在代码中应该经常性的使用 try-catch 来进行异常捕获。

  • 语法:

    try 
    {
    可能会出现异常的代码;
    }
    carch
    {
    出现异常后要执行的代码;
    }

执行过程:如果 try 中的代码没有出现异常,那么 catch 中的代码不会执行。如果 try 中的代码出现了异常,那么这行出现异常的代码后面还有代码都不会执行了,而是直接跳到 catch 中执行代码。

下面图中的代码 int number = Convert.ToInt32(Console.ReadLine());有一个异常。
异常

捕获异常:

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("请输入一个数字");
            int number = 0;
            try
            {   
                // 捕获异常
                 number = Convert.ToInt32(Console.ReadLine());
            }
            catch 
            {
                // 出现异常后执行的代码
                Console.WriteLine("输入的内容不能够转换成数字");
            }

            Console.WriteLine(++number);
            Console.ReadKey();
        }
    }
}

输出结果:

输出结果

那么问题来了:
为什么把字段 number 另外声明还要赋值初值呢 ? 为什么输出后面还有一个0呢 ? 当我们捕获异常时由于后面我们要操作字段(作用域问题)并且未赋初值的字段不能使用,所以要先声明一下字段并赋初值,输出 catch 语句后还输出了一个 0 ,是因为 catch 里面的语句结束后会继续执行下面的语句。

在实际开发中往往我们想要的结果并不是这样的,而是当执行成功时我们要执行一些逻辑或其它代码,当执行失败时就要告知我们的用户一些信息。
那么该怎么解决呢?两种方法。

1. 直接将执行成功时要执行的代码直接写在 try 中。(不建议)

2. 定义一个 bool 值,当执行成功时 true ,当执行失败时 false,在下面判断为 true 时执行要执行的代码。(建议使用)

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("请输入一个数字");
            int number = 0;
            bool b = true;
            try
            {   
                // 捕获异常
                 number = Convert.ToInt32(Console.ReadLine());
            }
            catch 
            {
                // 出现异常后执行的代码
                Console.WriteLine("输入的内容不能够转换成数字");
                b = false;
            }
            if (b)
            {
                Console.WriteLine(number * 1);
            }
            Console.ReadKey();
        }
    }
}

这里写图片描述

知识点:

  • 变量的作用域:
    变量的作用域就是能够使用到这个变量的范围。
    变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束。在这个范围内,我们可以访问并使用变量。超出这个范围则访问不到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值