首页 > 技术文章 > 异常处理方法

IcoveJLearningBlog 2020-11-09 14:12 原文

使用try...catch...finally,而不是用判断语句去判断

ex:让用户输入两个数字,用户可能会输入非数字类型,处理该异常,如果出现该异常就让用户重新输入,输出这两个数字的和:

用的C#语言
using System;
using System.Collection.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _001_异常处理_学习{
    class Learning{
        static void Main(string[] args){
            double num1 = 0, num2 = 0;
            Console.WriteLine("输入第一个数字:");
            while(true){
             try{
                 num1 = Convert.ToDouble(Console.ReadLine());
                 break;
             }catch{
                 Console.WriteLine("您输入的并非数字,请重新输入!");
             }   
            }
            Console.WriteLine("输入第二个数字:");
            while(true){
             try{
                 num2 = Convert.ToDouble(Console.ReadLine());
                 break;
             }catch{
                 Console.WriteLine("您输入的并非数字,请重新输入!");
             }   
            }
            double sum = num1 + num2;
            Console.WriteLine(sum);//Console.WriteLine($"您输入的两个数字之和为"+sum);
            Console.ReadKey();
        }
    }
}

一个try可以接一个或多个catch,在catch后还可以再跟一个finally。

①try中的语句就相当于是去判断;

②catch是当try中检测出异常就跳到catch中执行语句,catch之后可以跟一判断句,就会涉及到Exception及其衍生类。

例如:
    try{
        System.out.println(2/0);
    }catch(NullPointerException e){
        System.out.println("出现空指针异常");
    }catch(ArrayIndexOutOfBoundsException e){
        System.out.println("数组越界异常");
    }catch(ArithmeticException e){
        System.out.println("算术异常");
    }catch(Exception e){
        System.out.println("异常");
    }

注意,如果要加入Exception的判断语句,必须放在最后面,因为它是基类,它的执行优先级最高。

③finally是无论之前发生了什么,其中语句都会执行。根据此特性,多将释放资源、关闭连接的语句放在其中。

推荐阅读