一 异常的概念
1 C# 中的异常处理
① try{…};
② catch(Exception e){…};
③ finally{…};
2 System.Exception类
① public Exception();
② public Exception(string s);
③ Message属性;
④ StackTrace属性;
3 几种常用的异常类
System.OutOfMemoryException
System.StackOverflowException
System.NullReferenceException
System.TypeInitializationException
System.InvalidCastException
System.ArrayTypeMismatchException
System.IndexOutOfRangeException
System.MulticastNotSupportedException
System.ArithmeticException
System.DivideByZeroException
System.StackOverflowException
二 捕获和处理异常
1 捕获异常
① try{};
② catch(AException e1){}
③ catch(BException e2){}}
④ catch(更一般的Exception e){}
⑤ finally{}
注意:
catch{}表示捕获所有种类的异常;
三 抛出异常
① throw语句抛出一个异常的语法为:
throw expression;
② 一般是这样的:
if(xxxxxxx) throw new SomeException(信息);
四 创建用户自定义异常类
1 从Exception或ApplicationException继承;
2 重抛异常;
throws;
3 异常链接
① throw new Exception(“msg”,e);
② 这里e称为内部异常;
③ InnerException属性;
④ 使得外部能进一步知道内部的异常原因;
五 算术溢出与checked
1 对溢出进行检查
① 对整个程序 csc/checked XXXX.cs;
② 对部分程序;
针对表达式:checked(表达式)及unchecked(表达式);
针对块语句:checked{…}及unchecked{…};
2 对溢出异常进行捕获
① try{} catch(OverflowException e){}
总结:
1 C#中异常处理
① try{…};
② catch(Exception e){…};
③ finally{…}
2 自定义异常类
从Exception或ApplicationException继承;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 银行系统内部异常
{
public class DataHouse
{
public static void FindData(long ID)
{
if (ID > 0 && ID < 1000)
Console.WriteLine(ID);
else
throw new DataHouseException("已到文件尾");
}
}
public class BankATM
{
public static void GetBalanceInfo(long ID)
{
try
{
DataHouse.FindData(ID);
}
catch(DataHouseException e)
{
throw new MyAppException("账号不存在", e);
}
}
}
public class DataHouseException:ApplicationException
{
public DataHouseException(string message):base(message)
{
}
}
public class MyAppException:ApplicationException
{
public MyAppException(string message):base(message)
{ }
public MyAppException(string message,Exception inner):base(message,inner)
{ }
}
public class Test
{
public static void Main()
{
try
{
BankATM.GetBalanceInfo(12345L);
}
catch(Exception e)
{
Console.WriteLine("出现了异常:{0}", e.Message);
Console.WriteLine("内部原因:{0}", e.InnerException);
}
Console.ReadKey();
}
}
}