c#基础之异常处理及自定义异常
一、什么是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#基础之异常处理及自定义异常的更多相关文章
- c#基础之异常处理及自定义异常 从SQLServer转储数据到MySQL
c#基础之异常处理及自定义异常 一.什么是c#中的异常? 异常是程序运行中发生的错误,异常处理是程序的一部分.c#中的异常类主要是直接或者间接的派生于 System.Exception类 ,也就是说S ...
- Python 基础之 异常处理
python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理? 先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...
- Springboot的异常处理与自定义异常
园友们好,元旦很快就到来了,提前祝各位园友们元旦快乐,今天给大家分享一个工作中必用一个知识点,就是使用枚举构建自定义异常并应用于springboot的异常处理器.开始之前我先把这个案例的结构大致说明一 ...
- JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别
JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...
- c#基础之异常处理
在开发过程中,经常遇到各种各样的小问题,很多是由于基础不牢固,没有经常总结导致的.遇到重复的问题可能可根据以往经验处理,但是对问题本身引发的原因进行深入的了解.工作很多年,但是c#基础像一层冰一样,可 ...
- TZ_06_SpringMVC_异常处理,自定义异常
1.SpringMVC异常处理的方式 . 2. 异常处理思路 1>. Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServle ...
- C#基础-异常处理与自定义异常
异常处理 static void Main(string[] args) { Console.WriteLine("请输入一个数字:"); try { // 监测可能出现异常代码 ...
- python__基础 : 异常处理与自定义异常
异常处理方法一般为: try: ------code----- except Exception as e: # 抛出异常之后将会执行 print(e) else: # 没有异常将会执行 print( ...
- Python之路第八天,基础(10)-异常处理
异常处理 1. 异常基础 python3 try: pass except Exception as ex: pass while True: num1 = input('num1:') num2 = ...
随机推荐
- 基于create-react-app的打包后文件路径问题
改绝对路径为相对路径. https://segmentfault.com/q/1010000009672497直接在package.json里加 "homepage":" ...
- 近期wxss总结
最近有一些需要点击才能实现的样式切换,我用的方法有2种 1 wxml 中 对class给一个判断式 class="变量?变化后的类:变化前的类" 这样在js中设一个变量,我是设成布 ...
- Dva三种方式实现dispatch的Promise回调
Dva2.0及以上版本 使用官方自带的Promise // 业务组件 e.g: Tags.js dispatch({ type: 'user/add', payload: {}, // 需要传递的信息 ...
- Apache Solr入门教程(转)
1.为什么选择Apache Solr Apache Solr是一个功能强大的搜索服务器,它支持REST风格API.Solr是基于Lucene的,Lucene 支持强大的匹配能力,如短语,通配符,连接, ...
- 显示等待 (web自动化测试)
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from sel ...
- MPU6050可以读取器件ID值,但读出的加速度计和陀螺仪的数据均为零
今天在调试MPU6050时发现,MPU6050可以正常读取器件ID,但读取的加速度计和陀螺仪的数据均为零. 经过排查发现,MPU6050第20脚的电容没用焊接,C6可以使用10uF的电容.
- tensorbordX使用
安装: pip install tensorflow-1.7.0 pip install tensorbord pip install tensorbordX 启动 tensorboard --log ...
- Linux系统时间, 硬件BIOS时间的校准与同步
#宿主机系统时间: date #宿主机时间校准方法: yum install -y ntpdate ntpdate -u ntp.api.bz #centos查看设置系统时区:(可能没有) cat / ...
- 【转载】DRuid 大数据分析之查询
转载自http://yangyangmyself.iteye.com/blog/2321759 1.Druid 查询概述 上一节完成数据导入后,接下来讲讲Druid如何查询及统计分析导入的数据 ...
- docker使用笔记
项目部署时用到了docker,以下分享了我在实践中使用的指令,和对docker一些个人的理解(※和字体加重部分) 本文选择使用网易的镜像源:https://c.163.com/hub#/m/home/ ...