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基础知识点相关的,所以也希望能分享 ...
随机推荐
- CSS实现动画特效导航栏
0 写在前面 今天用纯CSS编写了一种带有特效的导航栏,一方面巩固熟悉了导航栏的一般写法,另一方面练习了CSS3的一些新特性. 1 实现效果 当鼠标划过时,实现了一种动态百叶窗效果. 2 实现细节 2 ...
- idea搭建springboot
1.创建新项目 2.继续项目配置 Name:项目名称Type:我们是Maven构建的,那么选择第一个Maven ProjectPackaging:打包类型,打包成Jar文件Java Version: ...
- Linux安装Tomcat8
前置条件 安装jdk,见参考文章 下载Tomcat8 先从tomcat网站上下载最新的.gz安装包 tomcat官网下载地址 在下面找到Linux对应的tomcat安装包 我下载的文件名是:apach ...
- NEED TO DO
任务清单 计算几何 KDtree 容斥 后缀自动机套数据结构 FFT 四边形不等式/决策单调性优化 欧拉路 KM算法 BM算法 数论 min25筛 后缀数组 吉司机线段树 生成函数 ...
- Linux基本命令总结(九)
接上篇: 46,scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下 ...
- Docker的可视化管理工具对比
Docker的可视化管理工具有DockerUI.Shipyard.Rancher.Portainer等等,这里主要对这几个进行优劣对比. DockerUI: 优点 (1)支持container批量 ...
- Spring-Boot项目部署到单独tomcat运行
前言: 本文是对学习SpringBoot过程中的笔记,拿最简单的项目进行部署,大家可以进行类比,文章最后会提供部署前和部署后的github地址,用代码做的笔记,可能会很乱,有兴趣的同学可以参考 正文: ...
- Beamer 跳到另外一页
\documentclass[english]{beamer}\usepackage{babel} \begin{document} \begin{frame}\frametitle{the refe ...
- Linux-Centos 虚拟机安装
Centos安装方法 第一步:一般只有第一项和第三项有用 其余的没啥卵用 第二步:提示检查镜像完整性,这里我们不要检查 选 skip 继续(之前尝试选择OK,最后安装失败了,也不想找原因了) 第三步 ...
- Xvector in Kaldi nnet3
Xvector nnet Training of Xvector nnet Xvector nnet in Kaldi Statistics Extraction Layer in Kaldi ...