try/catch异常
try
{
}
catch (Exception ex)
{
}
把可能引起系统崩溃的异常放在try里面,如果没有出现异常就依次的执行,如果出现异常了就执行catch里面的语句然后继续执行,这样做的目的是为了防止因为异常导致软件崩溃,放在try里面就算出现了异常也可以继续执行catch。
try-catch-finally
后面追加一个finally无论是否异常都会执行,一般用于网络游戏掉线之后保存数据的处理
public void ExceptionDemo2()
{
int intNum1 = 10;
int intNum2 = 0;
int intResult = 0;
try
{
intResult = intNum1 / intNum2;
}
catch (Exception e)
{
Console.WriteLine("发生严重错误" + e.Message);
}
finally
{
Console.WriteLine("无论是否发生异常都会执行");
}
Console.WriteLine("intResult={0}", intResult);
}
system.exception
public void ExceptionDemo1()
{
int intNum1 = 10;
int intNum2 = 0;
int intResult = 0;
try
{
intResult = intNum1 / intNum2;
}
catch (Exception e)
{
Console.WriteLine("发生严重错误"+e.Message);
Console.WriteLine("" + e.Source);
Console.WriteLine("" + e.StackTrace);
Console.WriteLine("" + e.InnerException);
}
Console.WriteLine("intResult={0}", intResult);
}
使用多个catch捕获异常
C#封装了很多异常,比如除以0的异常( catch(DivideByZeroException e1)),通过多个catch来判断具体出现的是什么异常
catch (Exception e)被称为根异常,根异常的范围很大,所以可以在前面加多个细节异常
try
{
intResult = intNum1 / intNum2;
}
catch(DivideByZeroException e1)
{
Console.WriteLine("发生了除以零的异常" + e1.Message);
}
catch (Exception e)
{
Console.WriteLine("发生严重错误" + e.Message);
}
throw
在特定的情况下可以自己设置一个新的异常
throw new Exception(“销售数量不能小于负数”);
引发一个exception异常(根异常)
一旦insalenumber小于0,则产生异常
//通过throw自己定义一个
public void TestThrowException(int inSaleNumber)
{
if (inSaleNumber < 0)
{
throw new Exception("销售数量不能小于负数");
}
else
{
//计算销售额
}
}
自定义异常类
在一些特定的情况下需要自己定义异常类,比如销售额需要大于0,可以自己定义一个异常类,然后通过thowe调用自己的写的异常类,然后通过trycatch来处理自己定义的异常,一般最后才用exception异常类,因为他是根异常能监测出所有的异常但是效率不高。
自定义异常要继承ApplicationException类
在class前面添加[Serializable]序列化,这样其他的类就可以调用这个异常类,将其写入文件当中
/**
*
*
*
* 自定义异常类
*
*
* **/
using System;
namespace damo1
{
//序列化
[Serializable]
public class InvalidInputException:ApplicationException
{
public InvalidInputException()
{
}
public InvalidInputException(string strExceptionInfo):base(strExceptionInfo)
{
}
}
}
//通过throw自己定义一个
public void TestThrowException(int inSaleNumber)
{
if (inSaleNumber < 0)
{
throw new InvalidInputException("销售数量不能小于负数");
}
else
{
//计算销售额
}
}
public void ExceptionDemo3()
{
try
{
intResult = intNum1 / intNum2;
}
catch(InvalidInputException e1)
{
Console.WriteLine("自己定义的异常" + e1.Message);
}
catch (Exception e)
{
Console.WriteLine("发生严重错误" + e.Message);
}
finally
{
Console.WriteLine("无论是否发生异常都会执行");
}
}
常用异常类
程序调试技术
错误类型
语法错误:vs会直接发现
逻辑错误:需要运用调试技术来查找
运行错误:运行后会发现
可以在vs左边灰色的地段单击设置断点,这样在运行之后就会在这个点停住,再按F5就可以继续运行直到遇到下一个断点为止
局部变量窗口:进入断点之后会有局部变量的窗口,里面有所有局部变量的值
即时窗口:也可以通过及时窗口输入自己想获得的变量回车之后会显示其值
监视窗口:通过监视窗口可以动态观察特定的变量,比如像监视i变量就输入i变量,一般来说说如果一个项目有很多的变量局部变量窗口就会很乱,这个时候使用监视窗口特定的监视某些变量。
注意;如果没有窗口可以从以下路径调出