C#各种异常处理方式
.NET的异常处理机制用来发现、处理运行时错误。如果开发人员没有提供异常的处理机制,就默认采用.NET的机制。
通常使用try...catch...finally捕获异常。
try{//有可能发生异常}catch(Exception ex){//处理异常}finally{//清理}
○ 如果没有异常发生,就直接到finally语句块中。
○ finally语句块是必须执行的
○ 这里的catch和finally语句块是可选的。try语句块后面可以跟1个或多个catch语句块,try语句块后面可以直接跟finally语句块。
○ Exception是所有异常的基类
□ 使用.NET默认异常处理机制捕获异常
class Program{static void Main(string[] args){int a = 0;int result = 100/a;Console.WriteLine(result);Console.ReadKey();}}

□ 使用try...catch手动捕获异常
class Program{static void Main(string[] args){int a = 0;int result = 0;try{result = 100/a;Console.WriteLine("这里不会执行");}catch (DivideByZeroException exception){Console.WriteLine("出现异常");}Console.WriteLine(result);Console.ReadKey();}}

□ 使用try...catch...finally手动捕获异常
class Program{static void Main(string[] args){int a = 0;int result = 0;try{result = 100/a;Console.WriteLine("这里不会执行");}catch (DivideByZeroException exception){Console.WriteLine("出现异常");}finally{Console.WriteLine("放行吧,肯定会执行到我这里的~~");}Console.WriteLine(result);Console.ReadKey();}}

可见,finally语句块中的内容一定会被执行。
□ 使用try...多个catch...finally手动捕获异常
class Program{static void Main(string[] args){int a = 0;int result = 0;try{result = 100/a;Console.WriteLine("这里不会执行");}catch (DivideByZeroException exception){Console.WriteLine("不能被0除的异常");}catch (Exception ex){Console.WriteLine("异常");}finally{Console.WriteLine("放行吧,肯定会执行到我这里的~~");}Console.WriteLine(result);Console.ReadKey();}}

可见,只要有一个catch语句块捕获到异常,其它catch语句块不执行。
□ 使用try...catch(不带括号,不带参数)手动捕获异常
class Program{static void Main(string[] args){int a = 0;int result = 0;try{result = 100/a;Console.WriteLine("这里不会执行");}catch{Console.WriteLine("异常");}Console.WriteLine(result);Console.ReadKey();}}

通过以上方法,可以捕获任何异常。
□ try...catch手动捕获抛出的异常
class Program{static void Main(string[] args){try{throw new DivideByZeroException("除数不能为零");}catch (DivideByZeroException e){Console.WriteLine("异常");}Console.WriteLine("最后想说的");Console.ReadKey();}}

抛出异常本身并没有显示。
□ 较高层次上下文捕获较低抛出的异常
class Program{static void Main(string[] args){Calculate c = new Calculate();try{c.Divide();}catch (Exception e){Console.WriteLine("捕获异常");}Console.WriteLine("最后想说的");Console.ReadKey();}}public class Calculate{public void Divide(){try{int a = 0;int result = 100/a;}catch (DivideByZeroException e){throw;}}}

在Calculate内部抛出的异常,被更高层次的客户端捕获。
□ 自定义异常
class Program{static void Main(string[] args){try{throw new MyException("i am exception");}catch (Exception e){Console.WriteLine("捕获到自定义异常了~~");}Console.WriteLine("最后想说的");Console.ReadKey();}}public class MyException : Exception{public MyException(string str){Console.WriteLine("这是我自定义的异常:" + str);}}

总结:
○ .NET异常处理并不是标准的try...catch...finally,可以是很灵活的。
○ 尽量在较低层次抛异常,在较高层次捕获异常。
C#各种异常处理方式的更多相关文章
- Java_IO异常处理方式_入门小笔记
package IO; import java.io.FileWriter; import java.io.IOException; /** * IO异常处理方式 */ class FileWrite ...
- SpringBoot学习15:springboot异常处理方式5(通过实现HandlerExceptionResolver类)
修改异常处理方式4中的全局异常处理controller package com.bjsxt.exception; import org.springframework.context.annotati ...
- SpringMVC 三种异常处理方式
SpringMVC 三种异常处理方式 在 SpringMVC, SpringBoot 处理 web 请求时, 若遇到错误或者异常,返回给用户一个良好的错误信息比 Whitelabel Error Pa ...
- SpringBoot: 15.异常处理方式5(通过实现HandlerExceptionResolver类)(转)
修改异常处理方式4中的全局异常处理controller package com.bjsxt.exception; import org.springframework.context.annotati ...
- JAVA异常及其异常处理方式
异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error:如果你用Syste ...
- JDK线程池异常处理方式
1. 抛出异常 execute() java.util.concurrent.ThreadPoolExecutor#runWorker 中抛出,抛出之后经过以下两个步骤: catch块捕获,捕获之后再 ...
- 一文带你掌握Spring Web异常处理方式
一.前言 大家好,我是 去哪里吃鱼 ,也叫小张. 最近从单位离职了,离开了五年多来朝朝夕夕皆灯火辉煌的某网,激情也好悲凉也罢,觥筹场上屡屡物是人非,调转过事业部以为能换种情绪,岂料和下了周五的班的前同 ...
- SpringBoot系列: Spring支持的异常处理方式
===================================视图函数返回 status code 的方式===================================Spring 有 ...
- SpringMVC异常处理方式
一.描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合 ...
- Spring中的统一异常处理方式
源自:https://segmentfault.com/a/1190000016236188 在具体的SSM项目开发中,由于Controller层为处于请求处理的最顶层,再往上就是框架代码的. 因此, ...
随机推荐
- java 局部内部类
可以在代码块里创建内部类,典型的方法是在一个方法体的里面创建,局部内部类不能有访问说明符,因为它不是外围类的一部分,但是可以访问当前代码块的常量,以及此外围类的所有成员,下面分别对局部内部类和匿名内部 ...
- SQL中的注释语句
SQL中的注释分为单行注释和多行注释.顾名思义,单行注释就是对一行进行注释,多行注释就是同时对多行进行注释. 一.单行注释 SQL语句中的单行注释使用 -- create database datab ...
- Ansible介绍及安装部署
本节内容: 运维工具 Ansible特性 Ansible架构图和核心组件 安装Ansible 演示使用示例 一.运维工具 作为一个Linux运维人员,需要了解大量的运维工具,并熟知这些工具的差异,能够 ...
- 基于centos6构建私有gitbook平台
前言: 开源gitbook工具可以让你方便有效的管理自己的文章笔记.发布产品文档等.这里为了学习,基于centos系统构建一个私有的gitbook项目.与公有云gitbook平台相比,这里是简单的展示 ...
- loadrunner——常见函数
loadrunner——常见函数 分类: LoadRunner 2012-04-11 20:41 703人阅读 评论(0) 收藏 举报 loadrunnersearchweb服务器脚本stringwe ...
- shell变量定义中的特殊符号
今天要写一个shell语句来输出数据库的v$database的信息 定义bb为一个接收sql返回值的变量 需要注意的是: select * from v$database ; 语句 由于其中用到了$ ...
- 使用 Web 服务 为 ECS Linux 实例配置网站及绑定域名
Nginx 服务绑定域名 https://help.aliyun.com/knowledge_detail/41091.html?spm=a2c4e.11155515.0.0.4lvCpF 以 YUM ...
- 【知了堂学习笔记】java 底层容易忽略的知识点
1. java中的关键字 提到关键字,最主要的就是不能用关键字作为标识符,值得注意的有以下几点. ①其中goto与const在java中没有定义,但是也是关键字.这个基本用不到,但是应该有个认知. ② ...
- iOS 9应用开发教程之编辑界面与编写代码
iOS 9应用开发教程之编辑界面与编写代码 编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main.storyboard文件就 ...
- leetcode 链表 两数相加
两数相加 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例 ...