使用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是无论之前发生了什么,其中语句都会执行。根据此特性,多将释放资源、关闭连接的语句放在其中。