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基础知识点相关的,所以也希望能分享 ...
随机推荐
- 测试框架httpclent 1.HttpClient简介及第一个demo
httpclient就是一个模拟 发送http请求的一个工具. 首先在pom.xml文件里面添加工具类 <dependencies> <dependency> <grou ...
- Servlet 学习
3.1 概念 运行在服务器端的小程序 Servlet 就是一个接口 定义JAVA类被浏览器访问(Tomact 识别)的规则 将来 我们需要自定义一个类 实现servlet 接口 重写方法 3.2 快速 ...
- python 爬虫之beautifulsoup(bs4)使用 --待完善
#!/usr/bin/env python # -*- coding:utf- -*- from bs4 import BeautifulSoup import requests url = 'htt ...
- eMMC真能优化成UFS?谈谈手机闪存的文件系统
和UFS闪存相比,eMMC的性能更弱,同一型号的手机混用这两种规格的闪存,让一些消费者感到了不满.对此,厂商称通过优化,eMMC的产品也可以获得优秀的体验.这个优化到底是怎么回事?根据以往的一些宣传, ...
- Java9 接口细谈
java9对接口进行了改进,允许在接口中定义默认方法和类方法并且都支持方法的实现.同时添加了一种私有方法,私有方法也可提供方法实现. 注:下面语法只有在Java8以上的版本才允许在接口定义默认方法.类 ...
- 将matlab数据保存为excel文件
摘录网址:https://blog.csdn.net/wangh0802/article/details/70312415 参考网址:https://jingyan.baidu.com/article ...
- HDU 1051(处理木棍 贪心)
题意是处理一批木棍,如果当前处理的木棍长度和重量均大于前一根木棍的长度和重量,则处理当前木棍花费为 0,否则花费为 1. 用结构体存储木棍信息,将木棍按照长度从小到大排序,若长度相等则按照重量从小到大 ...
- TensorFlow资源整理
什么是TensorFlow? TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示 ...
- apache中 sed 指定文件中某字符串增加行
#!/bin/bash #在 servername 域名 字符串后面添加指定字符串 servername=`grep ServerName httpd-vhosts.conf |awk '{print ...
- Spring系列(六) Spring Web MVC 应用构建分析
DispatcherServlet DispatcherServlet 是Spring MVC的前端控制器名称, 用户的请求到达这里进行集中处理, 在Spring MVC中, 它的作用是为不同请求匹配 ...