我们为什么需要异常处理、抛出Error
发布日期:2021-06-30 18:25:24 浏览次数:3 分类:技术文章

本文共 2113 字,大约阅读时间需要 7 分钟。

在这里插入图片描述

通俗的理解

1.为了良好的用户体验,程序会捕获这个异常 给用户一个良好的出错提示。

2.出现异常不处理,程序会终止,程序终止了,系统不能正常运行。

(因为程序的执行过程中总会遇到许多可预知或不可预知的错误事件,例如说,由于内存资源有限导致需要分配的内存失败了;或某个目录下本应存在的一个文件找不着了;或说不小心被零除了、内存越界了、数组越界了等等。这些错误事件存在非常大的隐患,因此程序员总需要在程序中不断加入if语句,来判断是否有异常出现,如果有,就必须要及时处理,否则可能带来意想不到的后果。但是这样一来,程序可读性差了很多,总是有许多与真正工作无关的代码,而且也给程序员增加了极大的工作负担。)

3.使用异常处理后:1、把错误处理和真正的工作分开来; 2、 代码更易组织,更清晰,复杂的工作任务更容易实现; 3、 毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了; 4、 由于C++中的try catch可以分层嵌套,所以它提供了一种方法使得程序的控制流可以安全的跳转到上层(或者上上层)的错误处理模块中去。(不同于return语句,异常处理的控制流是可以安全地跨越一个或多个函数)

为什么有异常

程序设计的要求之一就是程序的健壮性。希望程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素导致程序不能正常运行。

在设计算法时,往往对算法的正常逻辑处理流程设计得比较准确,对异常情况的处理反而不容易设计全面,导致程序在出现异常情况时崩溃。如果软件出现这种情况会给用户带来极不友好的体验。

例如:试设计一个程序,运行后提示用户输入两个整数。两个整数用空格隔开,用户输入后,程序显示出两个数字的和。这个程序正常的逻辑处理非常简单,但普用户输入的两个字符串不是整数,程序应该给出提示,否则程序有可能会崩溃。因此针对异常情况的处理也是非常重要的,当然有时这种处理会比较复杂。所以就会产生异常。

异常是什么

异常(Exception)是程序在运行时可能出现的会导致程序运行终止的错误。这种错误是不能通过编译系统检查出来的。常见的异常如下(其他的还有很多):

1.系统资源不足。例如,内存不足,不可以动态申请内存空间;磁盘空间不足,不能打开新的输出文件等

2.用户操作错误导致运算关系不正确。例如,出现分母为0。数学运算溢出,数组越界,参数类型不能转换等

而且异常有下面的一些特点:

1.偶然性。程序运行中,异常并不总是会发生

2.可预见性。异常的存在和出现是可以预见的

3.严重性。一旦异常发生,程序可能终止,或者运行的结果不可预知

怎么处理异常

异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。

各种编程语言在处理异常方面具有非常显著的不同点(错误检测与异常处理区别在于:错误检测是在正常的程序流中,处理不可预见问题的代码,例如一个调用操作未能成功结束)。某些编程语言有这样的函数:当输入存在非法数据时不能被安全地调用,或者返回值不能与异常进行有效的区别。例如,C语言中的atoi函数(ASCII串到整数的转换)在输入非法时可以返回0。在这种情况下编程者需要另外进行错误检测(可能通过某些辅助全局变量如C的errno),或进行输入检验(如通过正则表达式),或者共同使用这两种方法。

通过异常处理,我们可以对用户在程序中的非法输入进行控制和提示,以防程序崩溃。

从进程的视角,硬件中断相当于可恢复异常,虽然中断一般与程序流本身无关。

从子程序编程者的视角,异常是很有用的一种机制,用于通知外界该子程序不能正常执行。如输入的数据无效(例如除数是0),或所需资源不可用(例如文件丢失)。如果系统没有异常机制,则编程者需要用返回值来标示发生了哪些错误。

多数语言的异常机制的语法是类似的:用throw或raise抛出一个异常对象(Java或C++等)或一个特殊可扩展的枚举类型的值(如Ada语言);异常处理代码的作用范围用标记子句(try或begin开始的语言作用域)标示其起始,以第一个异常处理子句(catch, except, resuce等)标示其结束;可连续出现若干个异常处理子句,每个处理特定类型的异常。某些语言允许else子句,用于无异常出现的情况。更多见的是finally, ensure子句,无论是否出现异常它都将执行,用于释放异常处理所需的一些资源。

总结

1.应用程序遇到异常情况,产生异常。

2.发生异常时,控制流立即跳转到关联的异常处理程序(如果存在)。

3.如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误信息。

4.可能导致异常的操作通过 try 关键字来执行。

5.异常处理程序是在异常发生时执行的代码块。在 C# 中,catch 关键字用于定义异常处理程序。

6.程序可以使用 throw 关键字显式地引发异常。

7.异常对象包含有关错误的详细信息,其中包括调用堆栈的状态以及有关错误的文本说明。

8.即使引发了异常,finally 块中的代码也会执行,从而使程序可以释放资源。

转载地址:https://lichen.blog.csdn.net/article/details/115145175 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Bootstrap如何实现勾选协议才能上传表单
下一篇:初识Go语言--优势、劣势、发展方向

发表评论

最新留言

不错!
[***.144.177.141]2024年04月10日 20时14分43秒