(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直通车(视频+教辅文档 ...
随机推荐
- SQL登录报错
在安装完SQL后,发现报出了error40和53的错误,作为小白的我也是一脸懵逼,明明一切都是按照默认加下一步安装的,为什么到了连接数据库的时候就出现了问题呢? 后来经过调查,发现需要将sql配置管理 ...
- 面对对象(JS)
面对对象的三大特征:封闭.继承.多态 七大基本原则: 1.单一职责 2.开闭原则 3.里氏替换 4.依赖倒置 5.接口隔离 6.迪米特法则 7.01组合/聚合 ...
- wordpress Warning: Parameter 2 to qtranxf_postsFilter() expected to be a reference
wordpress qtranslate-x Warning: Parameter 2 to qtranxf_postsFilter() expected to be a reference Para ...
- 常用Linux日志文件功能
/var/log目录下的20个Linux日志文件功能详解 : 如果愿意在Linux环境方面花费些时间,首先就应该知道日志文件的所在位置以及它们包含的内容.在系统运行正常的情况下学习了解这些不同的日 ...
- 26.String类(1)
1. 下面是一个使用equals的例子: 我查看了一下源代码,string类中equals方法的源代码如下: public boolean equals(Object anObject) { if ( ...
- Java中的接口是怎么实现的
接口 使用关键字interface来定义一个接口,和类的定义方法很相似分为接口声明和接口体. interface Printable { final int MAX = 100; void add( ...
- post请求传文件
public static JSONObject doFormDataPost(File file, String sURL) throws IOException { HttpClient cont ...
- flutter 插件
flutter_spinkit loading动画
- Flex birdeye笔记
1.将官网示例demo运行起来 新建Flex项目,直接将官网src下的demo拷贝到新建的项目的src下 .将官网example-binaries目录下的文件拷贝到新建项目的bin-debug下即可 ...
- 好文 | MySQL 索引B+树原理,以及建索引的几大原则
Java技术栈 www.javastack.cn 优秀的Java技术公众号 来源:小宝鸽 blog.csdn.net/u013142781/article/details/51706790 MySQL ...