深层次详解Exception
所有的异常类都继承自System.Exception类,当异常产生时,CLR将创建该异常类的实例对象,将从最底层依次寻找合适的异常类型,同时若存在catch语句时将会选择最合适的语句进行处理。
catch语句包括三种形式:
多catch的处理原则
一个异常发生时,会跳转到与异常异常最匹配的catch块执行,继承链决定了匹配度。
public static void HandleExecptionMethod()
{
try
{
throw new ApplicationException("ApplicationException Occur!");
}
catch (NullReferenceException)//尝试取消引用空对象时引发
{
Console.WriteLine("Handle1");
}
catch (ArgumentException)//当向方法提供的参数之一无效时引发
{
Console.WriteLine("Handle2");
}
catch (ApplicationException)//当程序发生非致命性应用程序错误时引发的异常
{
Console.WriteLine("Handle3");
}
catch (SystemException)
{
Console.WriteLine("Handle4");//与system命令空间中预定义异常定义基类
}
catch (Exception)//应用程序执行过程中发生错误
{
Console.WriteLine("Handle5");
}
Console.ReadKey();
}
在上例中共有5个catch块,注意catch块必须按照从最具体到最常规的顺序排列,否则可能造成编译错误。例若将Handle5的向上移到Handle4前面,则发生编译错误。
{
FileStream fs = null;
try
{
fs = new FileStream("c:\\dd.txt",FileMode.Open);
StreamReader strder = new StreamReader(fs,System.Text.Encoding.Default,false);
string st = strder.ReadLine();
Console.WriteLine(st);
}
catch (Exception e)
{
Console.WriteLine(e.GetType());//获取异常类型
//throw new FileNotFoundException("data.txt is not existed"); //重新获取异常
}
finally
{
fs.Close();
}
}


深层次详解Exception的更多相关文章
- Spring中的@Transactional(rollbackFor = Exception.class)属性详解
序言 今天我在写代码的时候,看到了.一个注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,这个注解的用法: 异常 如下图所示,我们都 ...
- “全栈2019”Java异常第十八章:Exception详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- Java 里的异常(Exception)详解
作为一位初学者, 本屌也没有能力对异常谈得很深入. 只不过Java里关于Exception的东西实在是很多. 所以这篇文章很长就是了.. 一, 什么是java里的异常 由于java是c\c++ ...
- 基于Web的Kafka管理器工具之Kafka-manager启动时出现Exception in thread "main" java.lang.UnsupportedClassVersionError错误解决办法(图文详解)
不多说,直接上干货! 前期博客 基于Web的Kafka管理器工具之Kafka-manager的编译部署详细安装 (支持kafka0.8.0.9和0.10以后版本)(图文详解) 问题详情 我在Kaf ...
- coding++:Spring中的@Transactional(rollbackFor = Exception.class)属性详解
异常: 如下图所示,我们都知道 Exception 分为 运行时异常 RuntimeException 和 非运行时异常. error 是一定会回滚的. 如果不对运行时异常进行处理,那么出现运行时异常 ...
- python异步并发模块concurrent.futures入门详解
concurrent.futures是一个非常简单易用的库,主要用来实现多线程和多进程的异步并发. 本文主要对concurrent.futures库相关模块进行详解,并分别提供了详细的示例demo. ...
- Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析
转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...
- 「万字图文」史上最姨母级Java继承详解
摘要:继承是面向对象软件技术中的一个概念.它使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用. 本文分享自华为云社区<「万字图文」史上最姨母级Java继承详解丨[奔跑吧!JAVA] ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
随机推荐
- CSS设置行内元素和块级元素的水平居中、垂直居中
CSS设置行内元素的水平居中 div{text-align:center} /*DIV内的行内元素均会水平居中*/ CSS设置行内元素的垂直居中 div{height:30px; line-heigh ...
- CF Amr and Music (贪心)
Amr and Music time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- Reids配置文件redis.conf中文详解
redis的各种配置都是在redis.conf文件中进行配置的. 有关其每项配置的中文详细解释如下: 附redis.conf英文原版: # Redis configuration file examp ...
- [改善Java代码]警惕数组的浅拷贝
建议62:警惕数组的浅拷贝 一.分析 在日常工作中,我们会遇见很多数组的拷贝和复制的问题,但是在你使用系统提供的API进行编码的时候,无形中会留下浅拷贝的隐患. 二.场景 有这样一个例子,第一个箱 ...
- CentOS 6.6下Redis安装
安装redis的过程非常的简单,具体参考教程官网:http://redis.io/download 1.下载并安装 下载的redis-3.2.5.tar.gz安装包默认在/usr/local/src/ ...
- 如何评价微信小程序?
这次我不站张小龙,虽然他说的「用完即走」的道理在,但我并不认为小程序会形成生态. (一) 仅仅从抽象场景上来讲,小程序当然很美好. 对开发者来说,不用费尽心思开发好多平台的 APP 了,不用考虑适配各 ...
- 《HTML5 and Javascript Web Apps》读书笔记要点摘录
必须要承认的是这本由Wesley Hales编写的书对要进军web apps 的程序员(媛)来说绝对是福音,很薄的一本书简明扼要的说明了web apps的实现原理,实现工具以及优缺点.拾人牙慧,作此摘 ...
- Commons JXPath - Modifying Object Graphs
JXPath 除了可以 XPath 语法访问 JavaBeans.DOM/JDOM,也可以对其属性赋值. 以下面的 JavaBeans 为例. package com.huey.jxpath; imp ...
- Tomcat - 设置 HTTP 摘要认证
在 Tomcat 中设置 HTTP 摘要认证的示例 在 Tomcat 中设置摘要认证与设置基本认证几乎一样,差别在于配置 web.xml 时,<login-config/> 元素在指定认证 ...
- Newtonsoft.Json.dll序列化为json,null值自动过滤
var jSetting = new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore}; var json = ...