- 异常的概念
异常实际上是程序中错误导致中断了正常的指令流的一种事件.(你可以认为异常是任何中断正常程序流程的错误条件)。
产生异常的条件:
1:想打开的文件不存在
2:网络连接中断
3:调用空引用
4:除0异常
。。。。
由于C#是面向对象,所有所有的错误被封装在异常对象中 一旦错误发生,将接收到一个特定的异常对象。
- 异常类
.NET Framework 类库中的所有异常都派生于 Exception 类,异常包括系统异常和应用异常。
默认所有系统异常派生于 System.SystemException,所有的应用程序异常派生于 System.ApplicationException。
系统异常一般不可预测,比如内存堆栈溢出,空对象引用,权限限制,硬件读取错误等等
应用程序异常一般可以预测,比如文件对象找不到啦,值不在范围内啦,数据类型不一致等等,设计,处理逻辑可以判断的。
常见的异常类如下图所示:
常见的系统异常类如下表所示:
异常类 | 说明 |
System.OutOfMemoryException | 用 new 分配内存失败 |
System.StackOverflowException | 递归过多、过深 |
System.NullReferenceException | 对象为空 |
Syetem.IndexOutOfRangeException | 数组越界 |
System.ArithmaticException | 算术操作异常的基类 |
System.DivideByZeroException | 除零错误 |
三、异常处理
在 C# 语言中异常与异常处理语句即 try ... catch... finally
在上述异常处理的形式中所用到关键字其含义如下: try:用于检查发生的异常,并帮助发送任何可能的异常。
catch:以控制权更大的方式处理错误,可以有多个 catch 子句。
finally:无论是否引发了异常,finally 的代码块都将被执行。
举例如下:
四、自定义异常
虽然在 C# 语言中已经提供了很多异常处理类,但在实际编程中还是会遇到未涉及的一些异常处理。
例如想将数据的验证放置到异常处理中,即判断所输入的年龄必须为 18〜45,此时需要自定义异常类来实现。
自定义异常类必须要继承 Exception 类。
自定义异常的语句如下:
class 异常类名 :Exception{}
抛出自己的异常,使用关键字throw 。
语句如下:
throw new 自定义异常类(参数列表);
举例如下: 限制用户输入数字的范围为1-100。
自定义异常类:
//InputException.cs
/// <summary>
/// 自定义异常类
/// 当输入值不满足要求时抛出
/// </summary>
class InputException:Exception
{
/// <summary>
/// 构造方法
/// <summary>
///<param name=”inputNum></param>
public InputException(int inputNum):base(string.Format("异常:输入范围为1‐ 100,值为{0}",inputNum)){}
}
class Program
{
static void Main(string[] args)
{ int input = 0;
while(true)
{
try
{
input = GetUserInput();
break;
}
catch(InputException ex)
{ Console.WriteLine(ex.Message); }
catch(FormatException) {
Console.WriteLine("输入的内容不是数字"); }
catch(Exception ex)
{ Console.WriteLine(ex.Message);
Console.WriteLine("发生异常,请重试!");
}
}
Console.WriteLine("Input Value :{0}", input);
}
static int GetUserInput() {
Console.WriteLine("请输入一个数字:");
string str = Console.ReadLine();
int input = int.Parse(str);
if (input < 1 || input > 100)
{ throw new InputException(input); }
return input;
}
}
以上就是我的分享,新手上道,请多多指教。
如果有更好的方法或不懂得地方欢迎在评论区教导和提问喔!