using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//异常处理
//处理时建立在4个关键词之上:try、catch、finally和throw
/*
* try: 一个try块标识了一个将被激活的特定的异常的代码块。后跟一个或多个catch块
* catch: 程序通过异常处理程序捕获异常。catch关键字表示异常的捕获
* finally: finally块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果你打开一个文件,不管是否出现异常文件都要被关闭
* throw: 当问题出现时,程序抛出一个异常。使用throw关键字来完成
*/
try
{
//引起异常的语句
}
catch(DivideByZeroException e1)
{
//错误处理代码
}
catch (Exception e1)
{
//错误处理代码
}
finally
{
//要执行的释放代码
}
//异常类
/*
* C#异常是使用类来表示的。C#中的异常类主要是直接或间接地派生于System.Exception类。System.ApplicationException和System.SystemException类派生于System.Exception类的异常类。
* System.ApplicationException类支持由应用程序生成的异常。所以程序员定义的异常都应派生自此类。
* System.SystemException类是所有预定义的系统异常的基类。下面是一些派生自System.SystemException类的预定义的异常类:
* 异常类 描述
* System.IO.IOException 处理I/O错误
* System.IndexOutOfRangeException 处理当方法指向超出范围的数组索引时生成的错误
* System.ArrayTypeMismatchException 处理当数组类型不匹配时生成的错误
* System.NullReferenceException 处理当依从一个空对象时生成的错误
* System.DivideByZeroException 处理当除以0时生成的错误
* System.InvalidCastException 处理在类型转换期间生成的错误
* System.OutOfMemoryException 处理空闲内存不足生成的错误
* System.StackOverflowException 处理栈溢出生成的错误
*/
//异常处理
DivNumbers div1 = new DivNumbers();
div1.division(57, 0);
//用户自定义异常,派生自ApplicationException类
Temperature temp = new Temperature();
try
{
temp.showTemp();
}catch(TempIsZeroException e)
{
Console.WriteLine("TempIsZeroException: {0}", e.Message);
}
//抛出对象
//如果异常是直接或间接派生自System.Exception类,你可以抛出一个对象。你可以在catch块中使用throw语句来抛出当前的对象
try
{
try
{
int x1 = 9;
int x2 = 0;
int a = x1 / x2;
Console.WriteLine("a: {0}", a);
}
catch(DivideByZeroException e)
{
throw e;
}
}
catch (DivideByZeroException e)
{
Console.WriteLine("top try...catch: {0}", e);
}
Console.ReadKey();
}
}
public class TempIsZeroException: ApplicationException
{
public TempIsZeroException(string message) : base(message)
{
}
}
public class Temperature
{
int temperature = 0;
public void showTemp()
{
if(temperature == 0)
{
throw (new TempIsZeroException("Zero Temperature found"));
}else
{
Console.WriteLine("Temperature: {0}", temperature);
}
}
}
public class DivNumbers
{
int result;
public DivNumbers()
{
result = 0;
}
public void division(int num1, int num2)
{
try
{
result = num1 / num2;
}
catch(DivideByZeroException e)
{
Console.WriteLine("Exception caught: {0}", e);
}
finally
{
Console.WriteLine("Result: {0}", result);
}
}
}
}