1、将预见可能引发异常的代码包含在try语句块中。

2、如果发生了异常,则转入catch的执行。

catch有几种写法:

catch  这将捕获任何发生的异常。

catch(Exception e)  这将捕获任何发生的异常。另外,还提供e参数,你可以在处理异常时使用e参数来获得有关异常的信息。

catch(Exception的派生类 e)  这将捕获派生类定义的异常,例如安卓中文网,我想捕获一个无效操作的异常,可以如下写:

catch(InvalidOperationException e) {     .... }  这样,如果try语句块中抛出的异常是InvalidOperationException,将转入该处执行,其他异常不处理。

catch可以有多个,也可以没有,每个catch可以处理一个特定的异常。.net按照你catch的顺序查找异常处理块,如果找到,则进行处理,如果找不到,则向上一层次抛出。如果没有上一层次,则向用户抛出,此时,如果你在调试,程序将中断运行,如果是部署的程序,将会中止。   如果没有catch块,异常总是向上层(如果有)抛出,或者中断程序运行。

3、finally

finally可以没有,也可以只有一个。无论有没有发生异常,它总会在这个异常处理结构的最后运行。即使你在try块内用return返回了,在返回前,finally总是要执行,这以便让你有机会能够在异常处理最后做一些清理工作。如关闭数据库连接等等。

注意:如果没有catch语句块,那么finally块就是必须的。  如果你不希望在这里处理异常,而当异常发生时提交到上层处理,但在这个地方无论发生异常,都要必须要执行一些操作,就可以使用try finally, 很典型的应用就是进行数据库操作: 用下面这个原语来说明:

try

{

DataConnection.Open();

DataCommand.ExecuteReader();

...

return;

}

finally

{

DataConnection.Close();

}

无论是否抛出异常,也无论从什么地方return返回,finally语句块总是会执行,这样你有机会调用Close来关闭数据库连接(即使未打开或打开失败,关闭操作永远是可以执行的),以便于释放已经产生的连接,释放资源。

顺便说明,return是可以放在try语句块中的。但不管在什么时机返回,在返回前,finally将会执行。

小结

try

{

//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容

}

catch

{

//除非try里面执行代码发生了异常,否则这里的代码不会执行

}

finally

{

//不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally

}

带程序的解读:  C#中的try-catch语句使用方法

try-catch错误处理表达式允许将任何可能发生异常情形的程序代码放置在try{}程序代码块进行监控,真正处理错误异常的程序代码则被放置在catch{}块内,一个try{}块可对应多个catch{}块。 示例  try-catch语句写入多个catch的使用  通过两个catch语句进行捕获异常,它们分别是ArgumentNullException异常和Exception异常。程序代码如下:

using System;

class MainClass

{

static void ProcessString(string str) {

if (str == null) {  throw new ArgumentNullException();

}

}

static void Main()

{

Console.WriteLine("输出结果为:");

try {

string str = null;  ProcessString(str);    //将任何可能发生异常情形的程序代码放置在try中进行监控

}

catch (ArgumentNullException e)        //真正处理错误异常的程序代码则被放置在catch{}块内

{

Console.WriteLine("{0} First exception.", e.Message);

}

catch (Exception e)

{

Console.WriteLine("{0} Second exception.", e.Message);

}

}

}

按<Ctrl+F5>键运行程序,运行结果如图1所示。

图1  try-catch语句

完整程序代码如下:

★★★★★主程序文件完整程序代码★★★★★

using System;

using System.Collections.Generic;

using System.Text;

namespace _3_16

{

class Program

{

static void ProcessString(string str)

{

if (str == null)

{  throw new ArgumentNullException();

}

}

static void Main()

{

Console.WriteLine("输出结果为:");

try

{

string str = null;

ProcessString(str);

}

catch (ArgumentNullException e)

{

Console.WriteLine("{0} First exception.", e.Message);

}

catch (Exception e)

{

Console.WriteLine("{0} Second exception.", e.Message);

}

}

}

}

C#中try catch finally 用法的更多相关文章

  1. c++中try catch的用法

    c++中try catch的用法 标签: c++exception数据库sqlc 2011-10-24 21:49 45622人阅读 评论(3) 收藏 举报  分类: 一点小结(267)  版权声明: ...

  2. PHP中try catch的用法

    异常(Exception)用于在指定的错误发生时改变脚本的正常流程. 什么是异常? PHP 5 提供了一种新的面向对象的错误处理方法. 异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这 ...

  3. JS中try catch的用法

    在js中也可以使用try/catch语法,把可能发生异常的代码使用try包裹起来,然后在catch中对异常进行处理,处理后就不会影响后面代码的执行. const a = null try { cons ...

  4. JS中try.. catch..的用法

    try 测试代码块的错误. catch 语句处理错误. throw 创建并跑出错误. try { //在这里运行代码 抛出错误 } catch(err) { //在这里处理错误 } 下面是一个实例: ...

  5. javascript中 try catch用法

    javascript中 try catch用法 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-08-16我要评论 JS try catch语句一般在什么情况下使用?是必须使 ...

  6. Java中try,catch,finally的用法

    Java中try,catch,finally的用法,以前感觉还算熟悉,但看到一篇博文才有更深点的理解,总结网友博客如下. Java异常处理的组合方式: 1.try+catch  运行流程:运行到try ...

  7. PHP中try{}catch{}的具体用法详解

    PHP中try{}catch{}是异常处理,将要执行的代码放入TRY块中,如果这些代码执行过程中某一条语句发生异常,则程序直接跳转到CATCH块中,由$e收集错误信息和显示.任何调用 可能抛出异常的方 ...

  8. Java中try()...catch()用法

    在stackoverflow偶尔看到的一个关于try()...catch()的用法,通常我们使用try...catch()捕获异常的,如果遇到类似IO流的处理,要在finally部分关闭IO流,当然这 ...

  9. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

随机推荐

  1. Java基础面试知识点总结

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  2. 2018-09-15 Java源码英翻中库以及服务原型

    服务很简单, 只为演示这个库, 源码在: program-in-chinese/code_translator_service. 在Postman测试效果: 演示服务地址: 74.91.17.250: ...

  3. AI2(App Inventor 2)离线版服务器单机版

    注意:每次退出前导出自己的项目到本地做备份. 单机版特点: 1.同步官方最新版本,没有对java源代码进行修改,仅修改war\login.jsp及\war\WEB-INF\appengine-web. ...

  4. vivo4.0系统怎么不ROOT激活Xposed框架的教程

    在越来越多应用室的引流,或业务操作中,大多数需要使用安卓的强大Xposed框架,前几天,我们应用室采购了一批新的vivo4.0系统,大多数都是基于7.0以上系统,大多数不能够刷入Root的su权限,即 ...

  5. 【工具】-RAP接口管理工具

    前言 RAP 是一个可视化接口管理工具, 通过分析接口结构,动态生成模拟数据,校验真实接口正确性, 围绕接口定义,通过一系列自动化工具提升我们的协作效率. 在 RAP 中,您可定义接口的 URL.请求 ...

  6. python3 完全理解赋值,浅copy,深copy 通过地址详细理解~

    额...老规矩,先来一天NLP再说,也没几条了. 十,在任何一个系统里,最灵活的部分是最能影响大局的部分 灵活便是有一个以上的选择,选择便是能力,因此最灵活的人便是最有能力的人. 灵活来自减少只相信自 ...

  7. MYSQL 主从复制,读写分离(8)

    Mysql 数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据文件,而是通过binlog日志复制到需要同步的服务器上. 一 主从复制的原理实现 原理图解说: 数据库更改 生成数据 ...

  8. 详解k8s原生的集群监控方案(Heapster+InfluxDB+Grafana) - kubernetes

    1.浅析监控方案 heapster是一个监控计算.存储.网络等集群资源的工具,以k8s内置的cAdvisor作为数据源收集集群信息,并汇总出有价值的性能数据(Metrics):cpu.内存.netwo ...

  9. ASP.NET Aries 高级开发教程:Excel导入之多表高级导入配置(中)

    前言: 在面对Excel的各种复杂导入情况中,多表导入是很常见的情景. 今天就来写一下多表导入是如何配置的. 1.自定义导入模板 怎么自定义: 其实就是自己新建一个Excel了,把列头都写好. 不过有 ...

  10. 【AI开发】基于深度学习的卡口车型、车牌识别

    服务端代码后面给出 卡口车型.车牌识别demo截图 服务器: