.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)的更多相关文章

  1. .NET中异常类(Exception)

    异常:程序在运行期间发生的错误.异常对象就是封装这些错误的对象. try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话,程序运行的线程将会挂掉,更严重的是这些错 ...

  2. 【转】【C#】异常类 Exception 枚举所有类型的异常

    一.基础 在C# 里,异常处理就是C# 为处理错误情况提供的一种机制.它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来. 对.NET类来说,一般的 异常类System ...

  3. C++异常第二篇---C++标准库异常类exception的使用

    1 继承图示 2 具体讲解 C++标准库异常类继承层次中的根类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下: na ...

  4. 借助backtrace和demangle实现异常类Exception

    C++的异常类是没有栈痕迹的,如果需要获取栈痕迹,需要使用以下函数: #include <execinfo.h> int backtrace(void **buffer, int size ...

  5. java中异常(Exception)的定义,意义和用法。举例

    1.异常(Exception)的定义,意义和用法 我们先给出一个例子,看看异常有什么用? 例:1.1- public class Test {    public static void main(S ...

  6. java 中异常类

    算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...

  7. 异常类Exception(String message, Throwable cause)中的cause理解

    这个在构造函数里面竟然有一个Throwable,感觉有些奇怪. 1. Throwable cause 这里cause要传一个Throwable的子类异常进去么? 是引起这个异常的异常,如果这个值是空值 ...

  8. java中Error与Exception有什么区别

    Error类和Exception类都继承自Throwable类. Error的继承关系: java.lang.Object  java.lang.Throwable      java.lang.Er ...

  9. Java最重要的21个技术点和知识点之JAVA集合框架、异常类、IO

    (三)Java最重要的21个技术点和知识点之JAVA集合框架.异常类.IO  写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享 ...

随机推荐

  1. apache beam ElasticSearchIO 遇到异常后job中断执行 自己定制beam IO

    可以将 ElasticSearchIO.java 源码拷贝至自己的项目.改名为MyElasticSearchIO.java.自己定制实现.这时编译会遇到auto.value失败.在pom.xml中加入 ...

  2. zabbix Server 4.0 部署及之内置item使用案例

    zabbix Server 4.0 部署及之内置item使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.zabbix组件架构概述(图片摘自网络) 1>.zabbi ...

  3. 在CentOS 上搭建nginx来部署静态页面网站

    在centOs 上搭建nginx来部署静态页面网站 一.部署服务器环境 nginx:轻量级.高性能的HTTP及反向代理服务器,占用内存少,并发能力强,相比老牌的apache作为web服务器,性能更加卓 ...

  4. java集合框架综述

    一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...

  5. WPF布局的应用

    一 写在开头1.1 本文内容本文主要内容是使用WPF来实现几个简单的界面. 二 登录窗口小例子2.1 实现代码XAML代码: <Window x:Class="LoginDialog. ...

  6. js文件上传原理(form表单 ,FormData + XHR2 + FileReader + canvas)

    目录 form表单上传 FormData + XHR2 + FileReader + canvas 无刷新本地预览压缩上传实例 目前实现上传的方式 浏览器小于等于IE9(低版本浏览器)使用下面的方式实 ...

  7. EffectiveC++ 第5章 实现

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 5 实现 Implementations 适当提出属于 ...

  8. DUMP3 企业级电商项目

    [开发模式]controller - service(合法校验问题) - dao   反过来也没问题 用户模块 登录 注册 用户名验证(实时反馈前端) 忘记密码 重置密码 退出登录 更新用户信息 获取 ...

  9. PHP循环语句深度理解分析——while, for, foreach, do while

    循环结构   一.while循环  while(表达式)  {   循环体;//反复执行,直到表达式为假  } 代码: $index = 1; while ($index<5) {        ...

  10. linux tomcat单机部署多应用

    1.修改/etc/profile 增加tomcat环境变量