C#编程入门_异常处理_16
来源:互联网 发布:唐诗草木知春不久归 编辑:程序博客网 时间:2024/05/21 12:20
21篇C#博客的配套源码
异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种积极的响应,从而达到程序具有更有健壮性,尽量的避免程序中的死机现象。比如尝试除以零,数组超出索引,字符串格式异常等。
异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。
try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。
catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。
finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。
try{ // 可能引起异常的语句}catch( ExceptionName e1 ){ //关于e1异常的处理}catch( ExceptionName e2 ){ //关于e2异常的处理}catch( ExceptionName eN ){ //关于eN异常的处理}finally{ // 要执行的语句 //一般用来处理关系文件流或者关闭数据库操作 //该模块是统一的出口 如果显示的写出来 那么是必定要执行的}
以上的catch捕获异常是可以并列存在的,但是需要注意的是,处于上面的异常和下面的最好没有什么关系,或者处于上面的异常是下面的一个子类。否则编译器会报错。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 异常{ class Program { static void Main(string[] args) { int num = 0; string numStr = string.Empty; try { Console.WriteLine("请输入一个整数"); numStr = Console.ReadLine(); num = int.Parse(numStr); } catch (OverflowException e)//输入的数据大于int类型的最大值的时候 { //打印出异常信息 //Console.WriteLine(e.Message + " " + numStr); //打印异常信息所在的文件及行数 //Console.WriteLine(e.StackTrace); //类型超出范围的处理办法 num = 1000; } catch(FormatException e) //输入的字符串格式错误的时候捕捉 { //格式化输入异常的处理办法 num = 2000; } catch (Exception e) //捕捉咩有考虑到的其他异常 { Console.WriteLine("其他异常"); //其他异常的处理方案 } Console.WriteLine("这个数字是:{0}",num); } }}
【注意】
异常处理的核心是try和Catch。这些关键字共同起作用,不能编写没有try的catch。一个try可以关联多个catch子句。
a、 不带参数的catch和catch(Exception)是有区别的
catch(Exception)可以捕获所有以Exception类派生的异常,而不带参数的catch可以捕获所有异常,不管异常是不是从Exception类派生。
b、与catch配套的catch和finally是可选的,但二者必选其一。一个try可对应多个catch,但一个try只能对应一个finally。
c、不论try中是否发生异常,finally中的语句一定会被执行。
finally关键字
1.捕获例外的最后一步是通过finally语句为例外处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态作统一的管理。
2.无论try所指定的程序块中是否抛出例外,也无论catch语句的例外类型是否与所抛弃的例外的类型一致,finally所指定的代码都要被执行,它提供了统一的出口。(finally语句与switch中的default语句是不同的!)
3.通常在finally语句中可以进行资源的清除工作,如关闭打开的文件、删除临时文件等。
finally和return的关系:
1.当try和catch中有return时,finally仍然会执行;
2.finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码如何修改,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;
3.finally中不可以有return,否则语法错误
参考代码如下
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 异常处理的执行顺序{ class Program { static void Main(string[] args) { Console.WriteLine(Test()); } static int Test() { int number = 1000; try { int num1 = 100; int num2 = 1; number = 2000; Console.WriteLine("number="+number); return number; } catch (Exception) { Console.WriteLine("异常发生了"); number = 3000; Console.WriteLine("number=" + number); } finally { Console.WriteLine("finally"); //finally 一般是用来关闭数据库 或者 文件流等操作 number = 4000; Console.WriteLine("number=" + number); } return number; } }}
- C#编程入门_异常处理_16
- C#编程入门16_异常处理
- C#之入门总结_委托_16
- C#编程入门_文件处理IO_17
- C#异常处理入门
- C#编程入门17_文件处理IO
- C++编程->异常处理入门
- C#入门11.6_自定义异常类
- C#之入门总结_ 异常_11
- C#编程入门_网络编程_21
- C#编程入门21_网络编程
- PL/SQL编程_异常处理
- C#与Matlab混合编程_入门
- C#编程入门_循环_5
- C#编程入门_数组_6
- C#编程入门_方法(函数)_7
- C#编程入门_跳转语句_8
- C#编程入门_杂项_12
- Codeforces 825D Suitable Replacement【贪心】水题
- Git for windows 配置
- 内存映射文件:MappedByteBuffer
- Hadoop基本概念
- ajax+json+Struts2实现list传递
- C#编程入门_异常处理_16
- C++基础-继承
- 基线问题以及块级转化内联有空隙问题
- 【RequestContext】RequestContext中globalData的使用;
- CSS可以被继承的样式
- ubuntu安装php
- 大数据学习之后就业靠谱吗?
- JAVASE基础小结
- C++并发编程框架Theron(7)——Theron中包含的类(一)