Atitit 语言的异常机制 目录 1. 异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法, 1 2. 三种模式 1 2.1. 终止模式
Atitit 语言的异常机制
目录
1. 异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法, 1
2. 三种模式 1
2.1. 终止模式 1
2.2. 恢复执行模式 2
2.3. 选择模式 2
2.4. Java中使用恢复模式 2
3. 推荐流程法 3
4. 异常处理的反模式重大问题 3
4.1. 反例之一:丢弃异常 3
4.2. 反例之二:不指定具体的异常 3
4.3. 反例之三:占用资源不释放 文件、Socket、JDBC连接之类的资源 3
4.4. 反例之四:不说明异常的详细信息 3
4.5. 反例之五:过于庞大的try块 4
4.6. 反例之六:输出数据不完整 4
- 异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法,
提供error code 所未能具体的优势。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解。
异常处理(又称为错误处理)功能提供了处理程序运行时出现的任何意外或异常情况的方法。异常处理使用 try、catch 和 finally 关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。
异常处理通常是防止未知错误产生所采取的处理措施。异常处理的好处是你不用再绞尽脑汁去考虑各种错误,这为处理某一类错误提供了一个很有效的方法,使编程效率大大提高。
- 三种模式
- 终止模式
许多常见的程序设计语言,包括Actionscript,Ada,BlitzMax,C++,C#,D,ECMAScript,Eiffel,Java,ML,Object Pascal(如Delphi,Free Pascal等),Objective-C,Ocaml,PHP(version 5),PL/1,Prolog,Python,REALbasic,Ruby,Visual Prolog以及大多数.NET程序设计语言,内建的异常机制都是沿着函数调用栈的函数调用逆向搜索,直到遇到异常处理代码为止。一般在这个异常处理代码的搜索过程中逐级完成栈卷回(stack unwinding)
- 恢复执行模式
。但Common Lisp是个例外,它不采取栈卷回,因此允许异常处理完后在抛出异常的代码处原地恢复执行。
- 选择模式
而 Visual Basic(尤其是在其早于 .net 的版本,例如 6.0 中)走得更远:on error 语句可轻易指定发生异常后是重试(resume)还是跳过(resume next)还是执行程序员定义的错误处理程序(goto ***)。 [1]
多数语言的异常机制的语法是类似的:用throw或raise抛出一个异常对象(Java或C++等)或一个特殊可扩展的枚举类型的值(如Ada语言);异常处理代码的作用范围用标记子句(try或begin开始的语言作用域)标示其起始,以第一个异常处理子句(catch, except, resuce等)标示其结束;可连续出现若干个异常处理子句,每个处理特定类型的异常。某些语言允许else子句,用于无异常出现的情况。更多见的是finally, ensure子句,无论是否出现异常它都将执行,用于释放异常处理所需的一些资源。[1]
- Java中使用恢复模式
一种称为"终止模型"(它是Java与C++所支持的模型).在这种模型中,将假设错误非常关键,将以致于程序无法返回到异常发生的地方继续执行.一旦异常被抛出,就表明错误已无法挽回,也不能回来继续执行.
另一种称为"恢复模型".意思是异常处理程序的工作是修正错误,然后重新尝试调动出问题的方法,并认为第二次能成功.
对于恢复模型,通常希望异常被处理之后能继续执行程序.在这种情况下,抛出异常更像是对方法的调用--可以在Java里用这种方法进行配置,以得到类似恢复的行为.(也就是说,不是抛出异常,而是调用方法修正错误.)或者,把try块放在while循环里,这样就可以不断的进入try块,直到得到满意的结果.
虽然恢复模型开始显得很吸引人,并且人们使用的操作系统也支持恢复模型的异常处理,但程序员们最终还是转向了使用类似"终止模型"的代码.因为:处理程序必须关注异常抛出的地点,这势必要包含依赖于抛出位置的非通用性代码.这增加了代码编写和维护的困难,对于异常可能会从许多地方抛出的大型程序来说,更是如此
- 推荐流程法
- 异常处理的反模式重大问题
- 反例之一:丢弃异常
- 反例之二:不指定具体的异常
代码:12行。
许多时候人们会被这样一种“美妙的”想法吸引:用一个catch语句捕获所有的异常。最常见的情形就是使用catch(Exception ex)语句。但实际上,在绝大多数情况下,这种做法不值得提倡。为什么呢?
- 反例之三:占用资源不释放 文件、Socket、JDBC连接之类的资源
代码:3行-11行。
异常改变了程序正常的执行流程。这个道理虽然简单,却常常被人们忽视。如果程序用到了文件、Socket、JDBC连接之类的资源,即使遇到了异常,也要正确释放占用的资源。为此,Java提供了一个简化这类操作的关键词finally。
- 反例之四:不说明异常的详细信息
代码:3行-11行。
仔细观察这段代码:如果循环内部出现了异常,会发生什么事情?我们可以得到足够的信息判断循环内部出错的原因吗?不能。我们只能知道当前正在处理的类发生了某种错误,但却不能获得任何信息判断导致当前错误的原因。
- 反例之五:过于庞大的try块
代码:3行-11行。
经常可以看到有人把大量的代码放入单个try块,实际上这不是好习惯。这种现象之所以常见,原因就在于有些人图省事,不愿花时间分析一大块代码中哪几行代码会抛出异常、异常的具体类型是什么。把大量的语句装入单个巨大的try块就象是出门旅游时把所有日常用品塞入一个大箱子,虽然东西是带上了,但要找出来可不容易。
- 反例之六:输出数据不完整
代码:7行-8行。
不完整的数据是Java程序的隐形杀手。仔细观察这段代码,考虑一下如果循环的中间抛出了异常,会发生什么事情。循环的执行当然是要被打断的,其次,catch块会执行??就这些,再也没有其他动作了。已经输出的数据怎么办?使用这些数据的人或设备将收到一份不完整的(因而也是错误的)数据,却得不到任何有关这份数据是否完整的提示。对于有些系统来说,数据不完整可能比系统停止运行带来更大的损失。
异常处理_百度百科.html
Atitit 语言的异常机制 目录 1. 异常处理,英文名为exceptional handling, 是代替日渐衰落的error code方法的新法, 1 2. 三种模式 1 2.1. 终止模式相关推荐
- 终止模式之两阶段终止模式
终止模式之两阶段终止模式 在一个线程 T1 中如何 "优雅" 终止线程 T2 ? 1. 利用 isInterrupted class TwoPhaseTermination {pr ...
- C语言输入月份,输出月份的英文名
C语言输入月份,输出月份的英文名 #include<stdio.h> int main() {char *month[13] = { "illegal","J ...
- 课程介绍 复习 创建对象的三种方式 自定义构造函数创建对象 工厂模式创建对象
课程介绍 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...
- Linux中vim的三种命令格式,及命令模式下常见的操作
目录 什么是vim 三种命令模式,以及相互转换 命令模式下的文本操作 什么是vim Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性 三种命令模式,以 ...
- 直流电机H桥的三种驱动方式:受限单机模式,单极模式,双极模式
一.引出 1.简单的开关串联电机只能控制有刷直流电机的启停,要同时控制正反转和转速就要引入H桥式控制电路. 2.对4个开关管的控制采用PWM,调节占空比可以实现调速.PWM频率一般在10KHz到20K ...
- canvas入门-1三种填充方式、渐变、模式
1.定义canvas的尺寸的时候最好用html的方式定义,用width和height的方式,用css会导致画布按照css设定的方式进行缩放,cavas内部是一个2d的渲染环境 2.一个canvas对应 ...
- Vmvare三种网络连接方式:桥接模式、NAT模式和HostOnly模式
桥接模式:这是最简单的 也是最方便的一种模式,使用的虚拟网卡我们的网络适配器界面中的 Vmnet0:这种情况下: 虚拟机会占用宿主机网段内的真实IP地址,宿主机.虚拟机以及网络之间的相互通讯都是通的: ...
- 三种中国特色的团购创新模式
团购真正被引爆是因为美国团购网站Groupon的迅速崛起,每天推出一个特定的优惠产品,并且必须在限定的时间内达到足够的人数.这种限量的超低折扣,在短时间内引起很多人的兴趣,使信息能够在短时间内在圈子中 ...
- 三种方式实现生产者和消费者模式
方式一:同步关键字实现 //用同步实现wait/notifyAll public class Stroge {private LinkedList<String> list;private ...
- vmware虚拟机 配置动态 静态 固态IP 三种模式: 桥接模式 nat模式和仅主机模式 Host-only模式
目录 目录 一. 安装了图形化桌面操作系统时 一.桥接模式 二.nat模式 三.host-only模式 二.没有桌面操作系统时(centos 7) 1.Bridged模式(桥接模式) 2.Nat模式( ...
最新文章
- iPhone重回5千档!苹果浴霸三摄新机发布,吊打华为上代芯,绝口不提5G
- 互联网公司面试必问的mysql题目(下)
- 在应用程序中使用虚拟内存——Windows核心编程学习手札之十五
- LeetCode:Longest Consecutive Sequence
- 朴素贝叶斯法(Naive Bayes,NB)
- 驾校一点通下载|驾校一点通电脑版下载
- android 动画后的位置,Android:Comp之后会重置动画位置
- 相对地址转化为绝对地址
- Vfloopy仿真虚拟软驱写软盘
- 三菱PLC定位控制1
- 学习笔记|Pytorch使用教程22(hook函数与CAM可视化)
- avast android高级版,排名第一 Android杀毒软件avast!评测
- 矢量网络分析仪--测天线时使用技巧
- 一步步教您搞定讯飞语音识别 | 寻找C站宝藏
- 2020-10-22 css画八边形等
- 一位北大才子的光棍节情诗
- 软件测试前景怎么样?大概要学什么?
- 计算机管理恢复分区,windows10系统隐藏恢复分区Recovery Image的方法
- 5.1 多元线性回归分析
- 数通基础-TCPIP参考模型
热门文章
- java处理最后一周_Java得到的一周的最后一天的一段时间内
- c语言中if内函数值为零,C语言——if(0)之后的语句真的不会执行吗?
- 联想计算机phoenix award bios,phoenix-Award BIOS
- android手机iPhone对比,安卓手机与苹果手机功能对比【详细介绍】
- mysql与mimic安装_MIMICIII 数据库教程(4)——MIMIC数据库的安装 #丁香打卡#
- 开发APP不搞清楚这20个问题,必然沦为一场灾难
- 检查版本是否需要更新的Demo
- 通过python和websocket构建实时通信系统[扩展saltstack监控]
- Contest 7.21(贪心专练)
- Mybatis-学习笔记(9)Mybatis3+spring4+springMVC