一、什么是c#中的异常?

异常是程序运行中发生的错误,异常处理是程序的一部分。c#中的异常类主要是直接或者间接的派生于 System.Exception类 ,也就是说System.Exception类是所有预定义的系统异常的基类。错误的出现并不总是编写应用的程序员的原因,有的时候应用程序也会因为终端用户的操作不当而发生错误。无论如何,在编写程序前都应该预测应用程序和代码中出现的错误。


二、常见的异常都有哪些?

        ①    ArrayTypeMismatchException

向数组中存数据时,存入的数据与数组定义的数据类型不同的时候便会出现该异常

②    DivideByZeroException

        用零除整数时引发该异常

③    IndexOutOfRangeException

        数组越界异常

④    NullReferenceException

        对象引用为空异常

⑤    OverflowException

        算数运算溢出

⑥    InvalidCastException

        运行时强制转换无效异常


三、异常处理

        使用如下代码结构来捕获和处理异常

try{
//try块中包含容易产生异常的代码
}
catch{
//异常处理代码
}
finally{
//用于消除try块中分配的任何资源
//以及即使发生异常也需要继续运行的代码
}

其中finally代码块是try-catch结构执行完成后,无论是否发生异常,finally代码块都会执行。即便是写代码时在try-catch结构里return了,仍旧是会执行了finally代码块之后再去return。

接下来看一个简单的异常捕获及处理的例子:

 public class MyException
{
public static void Main()
{
try
{
A();
B();
C(null);
}
//捕获A,B,C方法抛出的异常
catch (Exception ex)
{
//打印出异常信息
Console.WriteLine(ex);
Console.ReadKey();
}
} static void A()
{
// throw语法.
try
{
//引发零除异常
int value = / int.Parse("");
}
catch
{
//捕获到异常不做处理继续抛出异常
throw;
}
} static void B()
{
// 过滤异常类型.
try
{
int[] array = new int[]{ , , };
//引发数组越界异常
array[] = ;
}
//捕获到数组越界异常
catch (IndexOutOfRangeException ex)
{
//抛出数组越界异常
throw ex;
}
} static void C(string value)
{
// 创建新的异常.
if (value == null)
{
//抛出新的异常
throw new ArgumentNullException("value");
}
}
}

值得一提的是推荐使用throw来抛出异常。因为throw ex会将到现在为止的所有信息清空,认为你catch到的异常已经被处理了,只不过处理过程中又抛出新的异常,从而找不到真正发生异常的代码位置。

四、自定义异常

        自定义异常应该具有以下三个特征:

①  继承自System.ApplicationException类,并且使用Exception作为自定义异常类名的结尾

②  包含三个构造函数:一个无参构造函数;一个字符串参数的构造函数;一个字符串参数,一个内部异常作为参数的构造                函数

③  抛出自定义异常:throw new MyException(); 捕获自定义异常:Catch(MyException){  }

举个例子:

 public class MyException : ApplicationException
{
private string error;
private Exception innerException;
//无参数构造函数
public MyException()
{ }
//带一个字符串参数的构造函数
public MyException(string msg)
{
error = msg;
}
//带有一个字符串参数和一个内部异常信息参数的构造函数
public MyException(string msg, Exception exception)
{
innerException = exception;
error = msg;
}
public string GetError()
{
return error;
}
}

五、总结

异常处理的优势:

对用户来说,在程序发生错误时,不至于程序崩溃,而可以给出提示信息,提升用户的使用体验

对开发人员来说,可以在短时间内找到程序发生错误的位置,进而提高效率

c#基础之异常处理及自定义异常的更多相关文章

  1. c#基础之异常处理及自定义异常 从SQLServer转储数据到MySQL

    c#基础之异常处理及自定义异常 一.什么是c#中的异常? 异常是程序运行中发生的错误,异常处理是程序的一部分.c#中的异常类主要是直接或者间接的派生于 System.Exception类 ,也就是说S ...

  2. Python 基础之 异常处理

    python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理?  先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...

  3. Springboot的异常处理与自定义异常

    园友们好,元旦很快就到来了,提前祝各位园友们元旦快乐,今天给大家分享一个工作中必用一个知识点,就是使用枚举构建自定义异常并应用于springboot的异常处理器.开始之前我先把这个案例的结构大致说明一 ...

  4. JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别

    JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...

  5. c#基础之异常处理

    在开发过程中,经常遇到各种各样的小问题,很多是由于基础不牢固,没有经常总结导致的.遇到重复的问题可能可根据以往经验处理,但是对问题本身引发的原因进行深入的了解.工作很多年,但是c#基础像一层冰一样,可 ...

  6. TZ_06_SpringMVC_异常处理,自定义异常

    1.SpringMVC异常处理的方式 . 2. 异常处理思路 1>. Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServle ...

  7. C#基础-异常处理与自定义异常

    异常处理 static void Main(string[] args) { Console.WriteLine("请输入一个数字:"); try { // 监测可能出现异常代码 ...

  8. python__基础 : 异常处理与自定义异常

    异常处理方法一般为: try: ------code----- except Exception as e: # 抛出异常之后将会执行 print(e) else: # 没有异常将会执行 print( ...

  9. Python之路第八天,基础(10)-异常处理

    异常处理 1. 异常基础 python3 try: pass except Exception as ex: pass while True: num1 = input('num1:') num2 = ...

随机推荐

  1. Android文件各种存储路径的比较

    1.File cacheDir = context.getCacheDir(); 应用内部存储空间(数据文件私有)文件存储到这个路径下,不需要申请权限,当应用被卸载的时候,目录下的文件会被删除. 需要 ...

  2. ES6常用语法(上)

    ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应 ...

  3. javaScript数据类型的一些小细节

    JavaScript的数据类型有哪些就不说了,没必要. 由于JavaScript是一个弱类型的语言,就是定义的时候不需要定义数据类型,数据类型自动根据变量值来确定.而在JavaScript里面,数据类 ...

  4. maven 安装本地jar

    mvn install:install-file -Dfile=D:/open-api-sdk-2.0.jar -DgroupId=com.jd.open -DartifactId=jd-api-sd ...

  5. vue 组件之间相互传值 父传子 子传父

    1.父传子 把要传入的值放到父标签里  子组件使用props接收 父写法 子写法 2.子传父 子组件: childrenOnclick() { // 发布自定义事件 this.$emit(" ...

  6. js 上下滚动加停顿效果,js 跑马灯加停顿效果

    <div id="middle"> <ul id="slide1"> <li>尾号1183的用户刚刚领取了 78.23元 的 ...

  7. sql server 学习笔记 ( row_number, rank, dense_rank over partition by order by )

    refer : https://blog.csdn.net/winer2008/article/details/4283539 https://www.cnblogs.com/linJie193090 ...

  8. GoodNotes如何删除文档的某一页

    1.在“文稿”中点开需要操作的文件, 2. 点击左上角的缩略图icon(四个小方块) 3.此时你可以看到所有页,每页下面有个倒三角的小箭头 4. 点击小箭头,有删除选项.

  9. English trip V2 - 4. Really Wild Teacher:Maple Key:Adjectives of feeling

    In this lesson you will learn how to recognize animals and describe feeling. 课上内容(Lesson) 词汇(Key Wor ...

  10. pip使用国内源

    对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...