异常介绍

  我们平时在写代码或程序时,无意中(一般就是技术不够),而导致程序运行时出现意外(又称为异常),对于这个问题, C# 有专门的异常处理程序(当然其他语言也有)。

  异常处理所涉及到的关键字有几个,不用说都知道,已经耳熟能详了:trycatch 和 finally 等,用来处理失败的情况。当然,尽管这些操作也有可能失败,一般来说是释放,清理某些资源或记录日志等。

  哪些代码会出现异常呢:使用的基类库 BCL、第三方类库和我们写的自以为是的代码,还有,可以使用 throw 显式抛出异常。

  一种普遍出现的情形,异常很可能不是由代码直接引发,而是由调用堆栈中更靠下的位置其它方法所引发。在这种情形下下,CLR 会展开堆栈,并查找是否有包含针对你指定异常类型的 catch 块的代码,如果找到的话,就会执行最先匹配的 catch 块。 如果在调用堆栈中的任意位置中,异常处理程序都没有找到合适(你写的)的 catch 块,就会自动终止该进程,并向用户显示(抛出)一条错误的信息。

  在这里我写了一个被 0 处会出现异常(会显式引发 DivideByZeroException 异常)的示例;如果在执行的途中出现异常,则捕获该异常。

         /// <summary>
/// 除法
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
static double Division(double x, double y)
{
if (y == )
{
throw new DivideByZeroException();
} return x / y;
} static void Main(string[] args)
{
//假设
double x = , y = ; try
{
var result = Division(x, y);
Console.WriteLine($"result: {result}");
}
catch (DivideByZeroException e)
{ Console.WriteLine(e);
} Console.Read();
}

Excetion 特点

  • 所有异常类型都由基类 Exception 派生。

  • 使用 try 块包围你认为可能会出现异常的代码。

  • 一旦 try 块中发生异常,控制流将按顺序找到与之关联的 catch,如果一直没有找到关联的,会引发最终的异常基类 Exception 内的处理程序(前提你已经 catch)。

  • 如果出现异常却没有对应的异常处理程序,则该程序将会停止执行,并抛出对应错误的信息。

  • 在 catch 定义了的异常变量,可以获取对应异常类型的有关信息,比如调用堆栈的状态和错误的说明,具体看 Excetion 的属性。

  • throw 关键字可以显式引发异常。

  • 即使出现异常也会执行 finally 块中的代码。 一般来说,我们会使用 finally 块释放资源。例如,关闭xx流。

 
 

【博主】反骨仔

【出处】http://www.cnblogs.com/liqingwen/p/6193354.html

【参考】https://docs.microsoft.com/zh-cn/dotnet/articles/csharp/programming-guide/exceptions/

【参考】微软官方文档

[C#] C# 知识回顾 - 异常介绍的更多相关文章

  1. C#基础知识回顾--BackgroundWorker介绍

    简介 BackgroundWorker是.net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作.耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 始终 ...

  2. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

  3. [C#] C# 知识回顾 - 学会使用异常

    学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...

  4. [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

  5. C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

  6. [C#] C# 知识回顾 - 序列化

    C# 知识回顾 -  序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...

  7. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  8. Java基础知识回顾之五 ----- 多线程

    前言 在上一篇文章中,回顾了Java的集合.而在本篇文章中主要介绍多线程的相关知识.主要介绍的知识点为线程的介绍.多线程的使用.以及在多线程中使用的一些方法. 线程和进程 线程 表示进程中负责程序执行 ...

  9. python---基础知识回顾(六)网络编程

    python---基础知识回顾(十)进程和线程(进程) python---基础知识回顾(十)进程和线程(多线程) python---基础知识回顾(十)进程和线程(自定义线程池) 一:Socket (一 ...

随机推荐

  1. 聊聊Unity项目管理的那些事:Git-flow和Unity

    0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...

  2. html5 canvas常用api总结(三)--图像变换API

    canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...

  3. ABP文档 - Mvc 控制器

    文档目录 本节内容: 简介 AbpController基类 本地化 其它 过滤 异常处理和结果包装 审计日志 验证 授权 工作单元 反伪造 模型绑定器 简介 ABP通过nuget包Abp.Web.Mv ...

  4. Java 8五大主要功能为开发者提供了哪些便利?

    两年前当Java 8发布后,立即受到了业界的欢迎,因为它大大提高了Java的性能.它独特的卖点是,顾及了编程语言的每一个方面,包括JVM(Java虚拟机)和编译器,并且改良了其它帮助系统. Java是 ...

  5. PhotoView实现图片随手势的放大缩小的效果

    项目需求:在listView的条目中如果有图片,点击条目,实现图片的放大,并且图片可以根据手势来控制图片放大缩小的比例.类似于微信朋友圈中查看好友发布的照片所实现的效果. 思路是这样的:当点击条目的时 ...

  6. html5 canvas常用api总结(二)--绘图API

    canvas可以绘制出很多奇妙的样式和美丽的效果,通过几个简单的api就可以在画布上呈现出千变万化的效果,还可以制作网页游戏,接下来就总结一下和绘图有关的API. 绘画的时候canvas相当于画布,而 ...

  7. linux服务器开发一 基础

    注:本文仅限交流使用,请务用于商业用途,否则后果自负! Linux 1.Linux介绍 Linux是类Unix计算机操作系统的统称. Linux操作系统的内核的名字也是“Linux”. Linux这个 ...

  8. 【centos7常用技巧】RPM打包

    一.RPM打包的目的 1.当目标机中不存在编译环境时,可以先在本地环境中编译打包,然后直接在目标机中用rpm -ivh *.rpm安装即可. 2.当需要在目标机中安装多个软件或者增加多个文件时,可以将 ...

  9. centos6和centos7防火墙的关闭

    CentOS6.5查看防火墙的状态: [zh@localhost ~]$service iptable status 显示结果: [zh@localhost ~]$service iptable st ...

  10. Linux实战教学笔记03:操作系统发展历程及系统版本选择

    标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...