C#--异常

ops/2024/12/19 0:54:35/

异常与异常处理机制

异常是指程序运行期间产生的错误。异常会导致运行程序提前终止。

• 异常处理机制是用于处理异常的一种结构化方法。

 基本思想是将异常的检测与处理分离。

当在一个函数体中检到异常条件 存在,但无法确定相应的处理方法时,将引发一个异常,并由函数的直 接或间接调用者检测并处理这个异常。

没有进行异常处理的程序

try语句

try语句提供了捕获异常的机制。

有三种使用的格式:

(1)try后跟一个或多个catch块语句。

(2)try后跟一个finally块语句。

(3)try后跟一个或多个catch块语句和一个finally块语句。 

使用try-catch捕捉和处理异常

try-catch语句的执行过程:

• 当try块中有异常发生时,程序先创建一个包含异常信息的异常对象, 然后从前到后依次搜索是否有与该异常对象匹配的catch代码块,找到 匹配的代码块,就会执行该catch块中的语句,实现异常处理。

• 如果未发生异常,则跳过catch子句,继续执行try-catch之后的语句。 

添加捕捉和处理异常的功能 

说明:

1. catch语句中异常类型,必须是System.Exception或其派生类

2. catch中可以不指定异常类型和异常对象名,表示捕获所有的异常类型。

其格式为:catch{… …},必须是try块中最后一条catch语句

3. try和catch后面的一对花括号“{}”是必须的,即使代码块中只有一条 语句。

4. catch语句中同时指定异常类型和异常对象时,该对象代表当前正在被 处理的异常,可以在catch语句块内部使用。

5. try语句中可以有多个catch块,从前向后进行搜索匹配。 

. NET 的Exception 层次

Exception类是所有异常类的基类。

每个异常必须用一个Exception类或其派 生类的实例表示。

例如: DivideByZeroException和FormatException都是Exception类的派生类。

Exception类中有一个只读属性Message,该属性用来描述出现异常的信息

使用基类异常捕获相关异常类型层次中的异常,使其可以显示异 常的信息说明。

finally 语句块

• 在try-catch语句中,只有捕获到异常后,才会执行catch语句中的代码。还有一些特 殊的操作,无论是否发生异常都必须执行,这时可以用finally语句块定义,将执行的 代码放在finally块中。

• Finally语句常常与try-catch语句配合使用,try-catch-finally结构格式如下: 

编写使用finally语句块的异常处理程序

程序功能:打开一个文本文件,读出该文件的内容,并显示到屏幕上。不论文件是否存 在,都要执行文件的关闭操作。

 

throw语句

使用throw语句可以主动抛出异常。

throw语句的格式如下:

• 省略异常对象时,该语句只能用在catch语句中,用于再次引发异常处理。

• 带有异常对象时,则抛出指定的异常类。该异常既可以是预定义的异常类, 也可以是自定义的异常类。

通过throw抛出异常,使用catch语句捕获。 

使用throw语句抛出异常,处理使用数组时下标出界的错误

程序功能:打开一个文本文件,读出该文件的内容,并显示到屏幕上。不论文件是否存 在,都要执行文件的关闭操作。

用户定义异常类

用户定义异常类需直接或间接继承Exception类。

例10-6 创建用户自定义类-NegativeNumberException, 用来处理对负数进行计算平方根运算时产生的异常 

创建用户自定义类


http://www.ppmy.cn/ops/143036.html

相关文章

nVisual 前端集成SDK使用说明

目前客户需要搭建自己的可视化产品,但需要使用nVisual的可视化视图功能,根据目前项目实施需求,决定做了一款简单版的SDK视图插件,这个小插件的主要功能是嵌入到客户项目里给客户提供 ‘详细视图’‘拓扑视图’或者是‘主视图’的展示功能.目前已经开发完毕,这里做一下简单介绍.…

CSS系列(18)-- 工程化实践详解

前端技术探索系列:CSS 工程化实践详解 🏗️ 致读者:探索 CSS 工程化之路 👋 前端开发者们, 今天我们将深入探讨 CSS 工程化实践,学习如何在大型项目中管理 CSS。 工程化配置 🚀 项目结构 …

复现nnunetv1和nnunetv2过程的区别

1. 存放数据集的文件夹data内文件命名及内容不同 nnunetv1参考:nnUNetv1在linux平台上训练自己的数据集-CSDN博客 2. data.json文件内代码不同 # nnunetv2 # import setuptools # # if __name__ "__main__": # setuptools.setup() # # # import js…

深度与视差的关系及其转换

深度与视差的关系及其转换 在计算机视觉和立体视觉中,深度和视差是两个重要的概念。理解这两者之间的关系对于实现立体图像处理、三维重建以及深度估计至关重要。在这篇博客中,我们将深入探讨深度和视差的概念,并介绍它们之间的转换关系。 …

docker 搭建在线聊天应用

1、拉取阿里镜像 docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/upsnap/vocechat:latest 2、配置docker-compose.yml version: 3 services:vocechat:restart: alwaysports:- 8000:3000container_name: vocechat-servervolumes:- ./data:/home/voc…

【软件设计_设计模式】设计模式代码笔记

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。…

Databend 为什么使用 Rust 开发?

11 月 30 日,Rust China Tour 武汉站在武汉恺德光谷城际酒店举行。本次活动汇聚了来自 Databend、GreptimeDB、华中科技大学的多位 Rust 技术专家和研究者,共同探讨 Rust 语言在前沿技术中的创新应用。Databend 数据库研发工程师张祖前在活动中带来主题演…

详解MySQL在Windows上的安装

目录 查看电脑上是否安装了MySQL 下载安装MySQL 打开MySQL官网,找到DOWNLOADS 然后往下翻,找到MySQL Community(GPL) Downloads>> 然后找到MySQL Community Server 然后下载,选择No thanks,just start my download. 然后双击进行…