概念
  异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常
  但并不是所有的错误都是异常
  而处理这种错误,称为异常处理
  异常处理实际是不断去发掘异常、修改异常,使程序更稳定
  异常处理主要表现在四个方面:
    程序开发前:尽可能的想到会发生的错误,标注怎么处理应对
    程序开发中:尽量暴露程序的问题,解决这些可能的异常
    系统发布后:尽可能的解决隐藏的或测试人员未测试到的程序问题
    发生异常时:异常代码转化成了友好提示显示给用户

异常分类
  编译错误
    大小写混淆
    数据类型与变量类型不符
    使用未声明的变量

  运行错误
    数组下标越界
    除数为零
    其他运行错误

  逻辑错误
    超出数据类型的取值范围
    语句体忘记加大括号
    其他逻辑性错误

异常处理操作
  C#中异常处理时建立在四个关键词之上:try、catch、finally 和 throw。
  try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块
  catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获
  finally:用于执行给定的语句,不管异常是否被抛出都会执行
  throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成

  异常语句格式

 try

 {

 // 引起异常的语句

 }

 catch( ExceptionName e )

 {

 // 错误处理代码

 }

 finally

 {

 // 要执行的语句

 }

示例

 using System;
namespace DivisorIsZero
{
public class DivisorIsZero
{
private static void Main()
{
int div0 = ;
int div1 = ;
int div2 = ;
int DivValue; try
{
DivValue = div0 / div1;
System.Console.WriteLine("div0 / div1 = {0}", DivValue);
}
catch(DivideByZeroException e )
{
System.Console.WriteLine("零不能作为除数!异常值为:\n{0}",e);
} // catch(DivideByZeroException e)子句只能捕获特定的异常
// try内的程序代码可能还会产生其它的异常,这些异常只能由catch(Exception e)来捕获了
catch(Exception e )
{
System.Console.WriteLine("并非\''零作为除数引发的异常\"!异常值为:\n{0}",e);
}
finally
{
System.Console.WriteLine("无论是否发生异常,我都会显示");
System.Console.ReadKey();
}
}
}
}

结果

  

C#中常见的异常类
  C# 异常是使用类来表示的
  C# 中的异常类主要是直接或间接地派生于 System.Exception 类System.ApplicationException 和System.SystemException 类是派生于 System.Exception 类的异常类
  System.ApplicationException 类支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类
  System.SystemException 类是所有预定义的系统异常的基类

  由System.SystemException派生的异常类型:
  System.AccessViolationException 在试图读写受保护内存时引发的异常
  System.ArgumentException 在向方法提供的其中一个参数无效时引发的异常
  System.Collections.Generic.KeyNotFoundException 指定用于访问集合中元素的键与集合中的任何键都不匹配时所引发的异常
  System.IndexOutOfRangeException 访问数组时,因元素索引超出数组边界而引发的异常
  System.InvalidCastException 因无效类型转换或显示转换引发的异常
  System.InvalidOperationException 当方法调用对于对象的当前状态无效时引发的异常
  System.InvalidProgramException 当程序包含无效Microsoft中间语言(MSIL)或元数据时引发的异常,这通常表示生成程序的编译器中有bug
  System.IO.IOException 发生I/O错误时引发的异常
  System.NotImplementedException 在无法实现请求的方法或操作时引发的异常
  System.NullReferenceException 尝试对空对象引用进行操作时引发的异常
  System.OutOfMemoryException 没有足够的内存继续执行程序时引发的异常
  System.StackOverflowException 挂起的方法调用过多而导致执行堆栈溢出时引发的异常

  由System.ArgumentException派生的异常类型:
  System.ArgumentNullException 当将空引用传递给不接受它作为有效参数的方法时引发的异常
  System.ArgumentOutOfRangeException 当参数值超出调用的方法所定义的允许取值范围时引发的异常

  由System.ArithmeticException派生的异常类型:
  System.DivideByZeroException 试图用零除整数值或十进制数值时引发的异常
  System.NotFiniteNumberException 当浮点值为正无穷大、负无穷大或非数字(NaN)时引发的异常
  System.OverflowException 在选中的上下文中所进行的算数运算、类型转换或转换操作导致溢出时引发的异常

  由System.IOException派生的异常类型:
  System.IO.DirectoryNotFoundException 当找不到文件或目录的一部分时所引发的异常
  System.IO.DriveNotFoundException 当尝试访问的驱动器或共享不可用时引发的异常
  System.IO.EndOfStreamException 读操作试图超出流的末尾时引发的异常
  System.IO.FileLoadException 当找到托管程序却不能加载它时引发的异常
  System.IO.FileNotFoundException 试图访问磁盘上不存在的文件失败时引发的异常
  System.IO.PathTooLongException 当路径名或文件名超过系统定义的最大长度时引发的异常

  其他常用异常类型:
  ArrayTypeMismatchException 试图在数组中存储错误类型的对象
  BadImageFormatException 图形的格式错误
  DivideByZeroException 除零异常
  DllNotFoundException 找不到引用的dll
  FormatException 参数格式错误
  MethodAccessException 试图访问私有或者受保护的方法
  MissingMemberException 访问一个无效版本的dll
  NotSupportedException 调用的方法在类中没有实现
  PlatformNotSupportedException 平台不支持某个特定属性时抛出该错误

C#-异常处理(十四)的更多相关文章

  1. WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?

    原文:WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的? 服务端只有抛出FaultException异常才能被正常地序列化成Fault消息,并实现向客户 ...

  2. WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)

    原文:WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在.NE ...

  3. C#语言和SQL Server第十三 十四章笔记

    十三章  使用ADO.NET访问数据库 十四章使用ADO.NET查询和操作数据库 十三章:                                                       ...

  4. Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式

    Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Py ...

  5. 进击的Python【第十四章】:Web前端基础之Javascript

    进击的Python[第十四章]:Web前端基础之Javascript 一.javascript是什么 JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编 ...

  6. 使用Typescript重构axios(十四)——实现拦截器

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  7. 使用Typescript重构axios(二十四)——防御XSRF攻击

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  8. SpringBoot进阶教程(六十四)注解大全

    在Spring1.x时代,还没出现注解,需要大量xml配置文件并在内部编写大量bean标签.Java5推出新特性annotation,为spring的更新奠定了基础.从Spring 2.X开始spri ...

  9. 我的MYSQL学习心得(十四) 备份和恢复

    我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...

  10. 雅虎(yahoo)前端优化十四条军规

    第一条.尽可能的减少 HTTP 的请求数 (Make Fewer HTTP Requests ) http请求是要开销的,想办法减少请求数自然可以提高网页速度.常用的方法,合并css,js(将一个页面 ...

随机推荐

  1. 【转载】app测试的过程和重点关注内容

    针对 app测试的过程和重点关注内容,做以下梳理和总结:   1 . 首先是测试资源确认及准备 ( 1 ) 产品需求文档.产品原型图.接口说明文档以及设计说明文档等应齐全: ( 2 ) 测试设备及工具 ...

  2. Ansible--Ad-Hoc

    什么是Ad-Hoc (这其实是一个概念性的名字,是相对于写Ansible playbook来说的.类似于在命令行敲入shell命令和写shell scripts两者之间的关系)... 如果我们敲入一些 ...

  3. Elasticsearch 集群和索引健康状态及常见错误说明

    之前在IDC机房线上环境部署了一套ELK日志集中分析系统, 这里简单总结下ELK中Elasticsearch健康状态相关问题, Elasticsearch的索引状态和集群状态传达着不同的意思. 一.  ...

  4. Magicodes.NET框架之路——让代码再飞一会(ASP.NET Scaffolding)

    首先感谢大家对Magicodes.NET框架的支持.就如我上篇所说,框架成熟可能至少还需要一年,毕竟个人力量实在有限.希望有兴趣的小伙伴能够加入我们并且给予贡献.同时有问题的小伙伴请不要在群里询问问题 ...

  5. 纯JS实现加载更多(VUE框架)

    <template> <div class = 'car_list' reft='scrollobx' @scroll='scrollready($event)'> </ ...

  6. Docker在Linux上运行NetCore系列(四)使用私有Nuget与多个本地包引用运行ASPNetCore

    转发请注明此文章作者与路径,请尊重原著,违者必究. 本篇文章演示了使用Dockerfile在Linux(ubuntu16.04)系统上构建ASPNetCore应用,并且在一个解决方案中存在多个项目之间 ...

  7. [日常] nginx与负载均衡策略

    upstream mail.sina.net { #upstream的负载均衡,weight是权重,可以根据机器配置定义权重.weigth参数表示权值,权值越高被分配到的几率越大. server we ...

  8. 推荐 3 篇关于 java8 Lambda表达式的文章

    State of the Lambda 这篇主要讲 Labmbda 的背景和用法 译文:深入理解Java 8 Lambda(语言篇--lambda,方法引用,目标类型和默认方法) State of t ...

  9. Hibernate入门(八)级联保存或更新(含问题在末尾,求大佬指点..)

    级联保存或更新CASCADE 级联保存或更新: 作用就是:保存一方的数据的时候,会把关联的对象也同时保存. 级联保存或更新的配置: 属性名:cascade 属性值: 1.none:所有情况下均不进行关 ...

  10. 28-30 js 文本全选

    要点:使用select(); 上代码: if (e.keyCode === 27){ document.getElementById('input').select() } //当点击键盘esc键时候 ...