1.try-catch-finally 注意,在前面的try代码段或catch代码中遇到break,continue,goto等语句,finally代码段也不会被跳过。C#还规定finally代码段中不允许使用return语句;如果在finally代码段中使用了 break,continue或goto语句,那么转移语句也必须在此代码中。也就是说,finally代码段中的跳转语句不能跳出代码段之外。
2.try-finally结构,只“捕获”不“处理”异常,引发了异常,finally代码段仍会被执行。
3.当异常发生时,系统按顺序搜索catch子句的列表,第一个匹配该异常对象的类型的catch子句被执行。因此:
1)特定catch子句必须以一种顺序排列,最明确的异常类型第一,直到最普通的类型。
2)如果有一个一般catch子句,它必须是最后一个,并且在所有特定的catch子句之后。使用一个般catch子句是不好的。应该尽可能使用特定catch子句。一般catch子句通过让程序继续执行隐藏错误,让程序处于一种未知状态。
4. 如果发生异常的catch中没有捕获到异常,那么系统按顺序搜索调用栈寻找匹配代码,如果找不到,中止应用程序。如果找到了,则回到调用栈的顶端,廷着调用栈,执行任命封闭的try语句的finally子句,并从栈中弹出每个栈帧。
Exception 基类 的 一些属性(访问能过对象名点的方式)
Message:描述异常信息的字符串。
Source:引发异常的程序或对象的名称。
StackTrace:对异常传播的方法调用堆栈的描述。
TargetSite:引发异常的方法。