(34)C#异常
一、异常的层次结构
二、异常格式
异常的一般格式
try
{
//可能会抛出异常的代码
}
catch
{
//发现错误后会运行这里面的代码
}
finally
{
//写不论是否出现异常都执行的代码
}
格式变体
(1)可以省略finally
try
{
//可能会抛出异常的代码
}
catch
{
//发现错误后会运行这里面的代码
}
(2)可以有多个catch
每个catch块之间是有顺序的,子类必须写在父类之前,不然无法编译过
try
{
...
}
catch (System.ServiceModel.EndpointNotFoundException)
{
Console.WriteLine("由于目标计算机积极拒绝,无法连接!");
}
catch (Exception ex)
{
Console.WriteLine("["+DateTime.Now.ToString()+"] - "+ ex.Message);
}
(3)不包含catch
try
{
//可能会抛出异常的代码
}
finally
{
//写不论是否出现异常都执行的代码
}
这种方式不是用来判断异常,而是一钟确保try后执行finally的方式,如果try中有几个出口,这很有用
(4)嵌套try
异常处理可以互相嵌套,在内层找不到对应的处理代码,会向外层找。
而且具MSDN的说法“很多情况下,异常可能不是由代码直接调用的方法引发,而是由调用堆栈中位置更靠下的另一个方法所引发。 在这种情况下,CLR 将展开堆栈,查找是否有方法包含针对该特定异常类型的 catch 块,如果找到这样的方法,就会执行找到的第一个这样的 catch 块。 如果在调用堆栈中的任何位置都没有找到适当的 catch 块,就会终止该进程,并向用户显示一条消息。
static void Main(string[] args)
{
int n1 = ;
int n2 = ;
int result;
try
{
try
{
result = n1 / n2;
Console.WriteLine("{0}", result);
}
catch (MemberAccessException e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine("finally1");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.WriteLine("finally2");
}
Console.ReadKey();
}
三、Exception
e.ToString() 和 e.Message 的区别
e.ToString()获取的信息包括异常类型和异常详细消息,而e.Message 只是获取了异常的详细消息字符串。
四、throw
throw就是用来抛出异常的,
一个方法 A 中,使用throw语句抛出了一个异常,则调用了 A 方法的地方,必须进行捕捉,或者继续抛出,一直到 main方法,如果main方法也没有进行捕捉,系统则崩溃。
系统碰到没有捕捉的异常,立刻停止,你的弹出对话框的语句,在throw语句的后面,throw语句一执行,调用 A 方法的地方,立刻捕捉到了这个异常,并进行处理,throw后面的语句将不会执行。
throw new Exception(e.Message);
throw new Exception("自定义错误信息");
向上传递异常可以只使用throw,但不创建对象,表示抛出catch块的当前异常
catch
{
throw;
}
五、自定义异常
六、异常过滤器 --C# 6以后
新增 when条件
try
{
}
catch (WebException e) when (e.Status == WebExceptionStatus.Timeout)
{
}
catch (WebException e) when (e.Status == WebExceptionStatus.ConnectFailure)
{
}
七、throw表达式 -- C# 7以后
throw以前只是单独的句子
现在可以是
static void Main(string[] args)
{
argumentExp();
}
public static int argumentExp() =>throw new ArgumentException();
(34)C#异常的更多相关文章
- 《python学习手册》第34章 异常对象
基于字符串的异常 python在2.6之前可以使用字符串来定义异常,并且是通过对象标识符来匹配的(即通过is 而不是==) myexc = "My excetion string" ...
- Python学习 Part6:错误和异常
Python学习 Part6:错误和异常 两种不同类型的错误:语法错误和异常 1. 语法错误 语法错误,也被称作解析错误: >>> while True print('Hello w ...
- C++异常之四 异常类型的生命周期
异常类型的生命周期 1. throw 基本类型: int.float.char 这三种类型的抛出和函数的返回传值类似,为参数拷贝的值传递. 1 int test_1(int num) throw (i ...
- java入门之从C#快速入门java
可变参数: Void sum(int…list){}以“…”三个字为关键字 可变参数:以params为关键字 34 对异常的描述: java中,异常分为两种,运行时异常(也就是uncheckExcep ...
- 程序员修炼之道中所有tips总结
1 关心你的技艺 如果你不在乎能否漂亮地开发出软件,你又为何要耗费生命去开发软件呢? 2 思考!你的工作 关掉自动驾驶仪,接管操作.不断地批评和评估你的工作. 3 ...
- C++知识点 笔试常见
C++知识点 一.#include “filename.h”和#include <filename.h>的区别 #include “filename.h”是指编译器将从当前工作目录上开 ...
- volley源码解析-Throwable类源码解析
前提知识点: 1.Serializable接口 作用:表示可序列化的语义.就是Java提供的通用数据保存和读取接口.任何类型实现了Serializeable接口,就可以被保存到文件中,或者作为数据流通 ...
- 多线程 共享资源 同步锁 java
Java多线程编程:Lock synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 如果一个代码块被synchronized修饰了,当一 ...
- python服务端工程师就业面试指导☝☝☝
python服务端工程师就业面试指导 由Python专业面试官打造的课,少之又少,专业代表着经验,代表着对考察点的通透理解,更代表着对你负责 第1章 Python工程师offer直通车(视频+教辅文档 ...
随机推荐
- Java中的接口是怎么实现的
接口 使用关键字interface来定义一个接口,和类的定义方法很相似分为接口声明和接口体. interface Printable { final int MAX = 100; void add( ...
- Delphi 窗体的释放和判断窗体是否存在
常规释放和关闭: Form.Free - 释放Form占用的所有资源.Free后,Form指针不能再使用,除非对Form重新赋值. Form.Hide - 隐藏Form.可以调用f ...
- paper 16 : 计算机视觉领域博客资源
这是收录的图像视觉领域的博客资源的第一部分,包含:中国内地.香港.台湾 这些名人大家一般都熟悉,本文仅收录了包含较多资料的个人博客,并且有不少更新,还有些名人由于分享的paper.code或者数据集不 ...
- 使用GDI+绘制的360风格按钮控件
将下面的代码拷贝到一个单元中,创建一个包,加入这个单元后安装.使用的时候设置好背景颜色,边框颜色,图标(png格式)相对路径的文件名称.这个控件可以利用PNG图像的颜色透明特性,背景色默认透明度为50 ...
- Unicode与MultiByte之间的练习: Process Cleaner
#include <cstdio> #include <cstring> #include <windows.h> #include <tlhelp32.h& ...
- WinDbg解决BHO不加载
昨天zhengwei同学说他机器上的一个BHO不能正常加载,我把BHO的代码拿过来,在我的两台机器上都验证了一下,一台是Win7+IE8的环境,一台是XP+IE7的环境,都能正常加载.zhengwei ...
- AdaBoost笔记之原理
转自:https://www.cnblogs.com/ScorpioLu/p/8295990.html 一.Boosting提升算法 AdaBoost是典型的Boosting算法,属于Boosting ...
- A1075 PAT Judge (25 分)
The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...
- 《DSP using MATLAB》Problem 8.46
下雨了,大风降温,一地树叶,终于进入冬季了 代码: %% ----------------------------------------------------------------------- ...
- 第三天:字典表dict、元组tuple、文件与类型汇总
1.字典表dict 声明 {键: 值,...} dict(键=值) d = {'isbn':'13123','title':'python入门'} #字典表中的键不能使用诸如列表这种可以改变的,只能使 ...