好的,今天我们来简单介绍一下捕获异常

首先先介绍一下异常:异常是错误,即使你特别的秀,代码也很难不出任何错误。如今的代码很多都会用到第三方源码,各种外部工具等,十分容易出现异常情况。

捕获异常分为3个语句(举个例子):(没用VS体谅体谅)

以下代码均添加了using static System.Console;请自行添加

int b=0;
int a=0;
try
{
	a/=b;
}
		  catch(DivideByZeroException i)
{
			    WriteLine("Hello World!");
			WriteLine(i.Message);
			  
		  }
		  finally
		  {
		 WriteLine("14");
		  }

1.try语句用来指明被异常保护的代码块

2catch语句用来处理异常

3finally语句块无论有无异常发生都会执行

2.2一般catch子句能接受任何异常,但不能确定引发异常的类型。这只允许对任何可能发生的异常的普通处理和清理(不建议用一般的catch子句)

catch
{
//do something 
}

2.3特定的catch子句形式把一个异常类的名称作为参数,它匹配该指定类或派生自它的异常类的异常(为了保证你们看完,异常类到最后在说)

catch(Exception Type)
{
//do something this
}

2.4带对象的特定的catch子句提供最多的关于异常信息,它匹配该指定类的异常,它还给出一个异常实例,称为异常变量,它是一个对CLR创建的异常对象的引用,可以在catch子句块内部访问一场变量的属性,以获取关于引起的异常的详细信息

catch(Exception Type,instID)
{
}

catch的排列顺序:特定的catch子句必须以最明确的异常类型排第一,直到最普通的类型

3.2在try中如果没有异常,那么将直接跳过catch子句到finally语句

当然,我们也可以用throw来抛出异常

try
{
int b=3;
	if(b==3)
	{
		DivideByZeroException p=new DivideByZeroException();
		
		throw p;
	}
}
		  catch(DivideByZeroException i){
			    WriteLine("Hello World!");
			  
		  }

我们也可以不带异常对象但它只能1.重新抛出当前异常,系统继续他的搜索,为该异常搜索另外的处理代码2这种操作只能用在catch子句中

try
		  {
try
{
int b=3;
	if(b==3)
	{
		DivideByZeroException p=new DivideByZeroException();
		
		throw p;
	}
}
		  catch(DivideByZeroException i)
		  {
			    WriteLine("Hello World!");
			  throw;
		  }
		  }
		  	  catch{
			   WriteLine("14");
		       }

附上Excption对象属性:

1.Date(公共):获取一个提供用户定义的其他异常信息的键/值对的集合

2Helpsult(公共):获取或设置指向此异常的关联帮助文件的连接

3HResult(公共):获取或设置HRESULT(一个分配给特定异常的编码数字值):

4 InnerException:获取导致当前异常的Exception实例

5Message(公共):获取描述当前异常的信息

6Source(公共):获取或设置导致错误的应用程序或对象的名称

7StackTrace(公共):获取调用堆栈上直接帧的字符串表示形式

8TargetSite(公共):获取引发当前异常的方法

Excption类:

1ArgumentException:方法的参数是非法的,除了继承来的属性名,此类还提供了string类型的属性ParamName表示引发异常的参数名称

2ArgumenNullException:一个空参数传递给方法,该方法不能接受该参数

3ArgumenOutOfRangeException:参数值超出范围

4ArithmeticException:出现算数上溢或者下溢

5ArrayTypeMismatchException:试图在数组中存储错误类型的对象

6BadlmageFormatchException:图形的格式错误

7DivideByZeroException:除零异常

8DllNotFindException:找不到引用的DLL

9 IndexoutRangException:数组索引超出范围

10FormatException:参数格式错误

11 InvalidoperationException:方法的调用时间错误

12 InvalidCastException:使用无效的类

13MethodAccessException:试图访问受保护的方法

14MissingMemberException:访问一个无效版本的DLL

15NotFiniteNumberException:使用对象不是一个有效成员

16NotsapportedException:调用的方法在类中并没有被实现

17NullReferenceException:试图使用一个未分配的引用

18OutofMemoryException:内存空间不够

19platformNotsupportedException:平台不支持某个特定属性抛出该错误

20StackOverflowException:堆栈溢出

21SystemException:运行时产生的所有错误的基类

22 NullReferenceException:当一个空对象被引用时运行产生

23 InvalidOperationException:当对方法的调用对对象的当前状态无效时由某些方法引发

24 InteropException:目标或发生在CLR外面环境的异常的基类

25comException:包含com类的HRESULT信息的异常

26SEHException:封装在win32结构异常处理信息的异常

糖果语法 1:

可以把会溢出的代码放在checked块内告诉编译器会发生溢出

checked
{
	byte a=254;
	a++;
	WriteLine($"{a}");
		a++;
	WriteLine($"{a}");
}

用unchecked告诉编译器你知道这回溢出,让它别报错

unchecked
{
	byte a=254;
	a++;
	WriteLine($"{a}");
		a++;
	WriteLine($"{a}");
			a++;
	WriteLine($"{a}");
}

下期再见;