2019-2-21.NET中异常类(Exception)
.NET中异常类(Exception)
异常:程序在运行期间发生的错误。异常对象就是封装这些错误的对象。
try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话,程序运行的线程将会挂掉,更严重的是这些错误有可能会直接抛给用户,让用户看到。所以说在程序的最外层必须要有捕获异常的程序。这样至少确保程序的正常运行。还有一点就是,捕获异常之后需要记录下来,这样对于我们排查问题也是有帮助的。
什么情况下,不需要捕获异常呢?
1.发生此类错误的时候,就没必要执行之后的代码的时候,就可以抛出异常了。
2.在开发封装类,并且发生的错误需要让调用者知道的时候,就可以抛出异常了。
Exception类:
翻译自:https://msdn.microsoft.com/en-us/library/804f22sf(v=vs.110).aspx
构造函数:4个重载,Exception()、Exception(SerializationInfo, StreamingContext)、Exception(String)、Exception(String, Exception)。
Exception():创建一个异常的实例,异常实例中所有的字段都需要手动再加,初次创建都是默认值。
Exception(SerializationInfo, StreamingContext):暂时不懂。
Exception(String message):创建一个带有错误信息的异常实例。message表示异常信息。
Exception(String message, Exception ex):创建一个异常实例,并为该异常赋值错误信息,如果有内部异常,也一起传进去。如果没有内部异常就传输null。
属性
属性名 | 类型 | 解释 |
Data | IDictionary | 获取除了异常信息以外,自定义异常的键值对的集合 |
HelpLink | String | 获取或设置一个跟异常相关联的帮助文档的地址 |
HResult | int | 获取或设置一个特定异常的代码 |
InnerException | Exception | 获取当前异常内部的异常实例 |
Message | String | 获取异常的错误信息 |
Source | String | 获取或设置当前异常发生在那个应用程序中 |
StackTrace | String | Gets a string representation of the immediate frames on the call stack. |
TargetSite | MethodBase | 获取当前异常发生的方法 |
异常类实例方法:
Equals(Object object):确定object是否与当前的对象相等。
ToString():把Exception对象转换成字符串,按照指定的格式显示。对Object.ToString () 方法进行重写。
Finalize():允许用户在垃圾回收机制回收之前,释放资源或者清除操作行为。
GetBaseException():在被继承类重写时,返回一个异常或随后的多个异常。
GetHashCode():作为默认的散列函数。
GetType():返回当前实例运行时的类型。
MemberwiseClone():浅复制当前的对象。
常用的异常类型
异常类型 | 描述 |
ArgumentException | 方法中传进一个非空参数是无效的 |
ArgumentNullException | 方法中传进一个空参数 |
ArgumentOutOfRangeException | 传入的参数超出了有效值的范围 |
DirectoryNotFoundException | 找不到相关目录 |
DivideByZeroException | 分子或分母为0 |
DriverNotFoundException | 驱动无效或者找不到相关驱动 |
FileNotFoundException | 找不到相关文件(文件不存在) |
FormatException | 格式转换出错,一个类型转换到另外一个类型的时候,格式不一致 |
IndexOutOfRangeException | 索引超出集合的范围 |
InvalidOperationException | 当前操作对象的状态是无效的 |
KeyNotFoundException | 集合中并没有找到对应的键 |
NotImplementedException | 方法或操作没有被实现 |
NotSupportedException | 不支持该方法或操作 |
ObjectDisposedException | 在一个操作上执行一个对象时,发现该对象已经被处理了 |
OverFlowException | 在算法、内存操作,类型转换的时候发生内存溢出 |
PathTooLongException | 一个目录或者文件超出了系统定义的最大长度 |
PlatformNotSupportedException | 当前运行环境不支持该操作 |
RankException | 方法中传进了错误的数组维数 |
TimeoutException | 操作超时 |
UIFormatException | 一个无效的统一资源标识符 |
注意:如果自己能判断的异常或者错误,就不要交由.net的异常处理机制。比如字符串转换成数字,应该在转换之前判断是否符合格式要求,而不是直接转换。
例子
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- namespace TestBLL
- {
- public class ExceptionTest
- {
- public static void Option(string argument1, int argument2)
- {
- try
- {
- if (argument1 == null)
- {
- throw new ArgumentNullException("参数为空值");
- }
- string result = argument1;
- if (argument2 == 101)//如果argument2值为101时,抛出参数无效的异常
- {
- throw new ArgumentException("参数无效");
- }
- if (argument2 > 100)
- {
- throw new ArgumentOutOfRangeException("参数超出了指定的范围");
- }
- if (!Directory.Exists("D:\\Test"))
- {
- throw new DirectoryNotFoundException("该目录不存在");
- }
- if (argument2 == 0)
- {
- throw new DivideByZeroException("分母不能为0");
- }
- int num = 10 / argument2;
- string path = @"C:\WINDOWS\system32\drivers\UsbCamIF.sys"; //驱动的默认安装地址
- if (!File.Exists(path))
- {
- throw new DriveNotFoundException("未找到相关驱动程序");
- }
- if (!File.Exists("D:\\Test\\test.txt"))
- {
- throw new FileNotFoundException("该文件路径不存在");
- }
- if (Regex.Match(argument1, "\\D").Success)//如果字符中存在非数字字符,在String类型转换成int类型的时候抛出异常
- {
- throw new FormatException("无法转换类型");
- }
- num = int.Parse(argument1);
- List<string> list = new List<string>() { "123", "456" };
- if (num > list.Count - 1)
- {
- throw new IndexOutOfRangeException("索引超出了集合的范围");
- }
- string indexStr = list[num];
- Dictionary<int, string> dic = new Dictionary<int, string>() { { 1, "123" }, { 2, "456" } };
- if (!dic.Keys.Contains(num))
- {
- throw new KeyNotFoundException("并为找到相应的键");
- }
- result = dic[num];
- }
- catch (Exception e)
- {
- e.HelpLink = "https://msdn.microsoft.com/en-us/library/system.exception(v=vs.110).aspx";
- e.Source = "Test";
- throw new Exception("方法中出现异常",e);//在此处捕获所有的异常,并统一抛出去
- }
- }
- }
- }
- 异常类实例
2019-2-21.NET中异常类(Exception)的更多相关文章
- .NET中异常类(Exception)
异常:程序在运行期间发生的错误.异常对象就是封装这些错误的对象. try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话,程序运行的线程将会挂掉,更严重的是这些错 ...
- 【转】【C#】异常类 Exception 枚举所有类型的异常
一.基础 在C# 里,异常处理就是C# 为处理错误情况提供的一种机制.它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来. 对.NET类来说,一般的 异常类System ...
- C++异常第二篇---C++标准库异常类exception的使用
1 继承图示 2 具体讲解 C++标准库异常类继承层次中的根类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下: na ...
- 借助backtrace和demangle实现异常类Exception
C++的异常类是没有栈痕迹的,如果需要获取栈痕迹,需要使用以下函数: #include <execinfo.h> int backtrace(void **buffer, int size ...
- java中异常(Exception)的定义,意义和用法。举例
1.异常(Exception)的定义,意义和用法 我们先给出一个例子,看看异常有什么用? 例:1.1- public class Test { public static void main(S ...
- java 中异常类
算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...
- 异常类Exception(String message, Throwable cause)中的cause理解
这个在构造函数里面竟然有一个Throwable,感觉有些奇怪. 1. Throwable cause 这里cause要传一个Throwable的子类异常进去么? 是引起这个异常的异常,如果这个值是空值 ...
- java中Error与Exception有什么区别
Error类和Exception类都继承自Throwable类. Error的继承关系: java.lang.Object java.lang.Throwable java.lang.Er ...
- Java最重要的21个技术点和知识点之JAVA集合框架、异常类、IO
(三)Java最重要的21个技术点和知识点之JAVA集合框架.异常类.IO 写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享 ...
随机推荐
- vue学习笔记(三)- vue2.x引入Element-ui
webpack+vue2.x+element-ui 作者:狐狸家的鱼 本文链接:vue2.x引入Element-ui GitHub:sueRimn 1.新建项目 vue init webpack vu ...
- centos7 LNMP
Nginx1.13.5 + PHP7.1.10 + MySQL5.7.19 一.安装Nginx 1.安装依赖扩展 # yum -y install wget openssl* gcc gcc-c++ ...
- Codeforces 1037C Equalize
原题 题目大意: 给你两个长度都为\(n\)的的\(01\)串\(a,b\),现在你可以对\(a\)串进行如下两种操作: 1.交换位置\(i\)和位置\(j\),代价为\(|i-j|\) 2.反转位置 ...
- Mybatis的应用1 Mybatis和logback的应用配置
首先新建一个module, 然后,在pom文件里面添加一些引用的项. pom.xml <?xml version="1.0" encoding="UTF-8&quo ...
- Hadoop启动脚本分析
Hadoop启动脚本分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇博客的你估计对Hadoop已经有一个系统的了解了,最起码各种搭建方式你应该是会的,不会也没有关系, ...
- Mac 终端美化方法
美化终端,主要是主题,字体,命令行提示3个方面. 主题 使用的主题是Solarized Dark主题. 安装主题: git clone git://github.com/altercation/sol ...
- DirectX11 With Windows SDK--07 添加光照与常用几何模型
前言 对于3D游戏来说,合理的光照可以让游戏显得更加真实.接下来会介绍光照的各种分量,以及常见的光照模型.除此之外,该项目还用到了多个常量缓冲区,因此还会提及HLSL的常量缓冲区打包规则以及如何设置多 ...
- 4.Centos7安装JDK8以及环境配置
1.下载 linux 版本 jdk (jdk-8u11-linux-x64.tar.gz) 一定要是 .tar.gz 版本,可以去我的百度网盘下载或者在百度上面找 2.新建文件夹命令:mkdir /u ...
- innobackupex的流备份【转】
并行备份 innobackupex -p123123 --parallel= /backup 节流备份(节省IO) innobackupex -p123123 --throttle= /backup ...
- 逆元知识普及(进阶篇) ——from Judge
关于一些逆元知识的拓展 刚艹完一道 提高- 的黄题(曹冲养猪) ,于是又来混一波讲解了 ——承接上文扫盲篇 四.Lucas定理(求大组合数取模) 题外话 这里Lucas定理的证明需要用到很多关 ...