前言
我们经常把程序运行过程的产生的错误称为异常,而这种错误是建立在程序本身编码是正确的前提条件下。
1、异常是什么?
指程序运行阶段发生的错误,不是编码阶段语法错误。
打开操作系统附带的计算器软件,输入1/0,计算器提示错误:除数不能为零。
我们分析一下:
1. 计算器的计算功能是正确。(程序编码是正确的)
2. 计算器不能限制用户输入,用户输入:1/0。(不能阻止异常,发生异常)
3. 用户不按照约定操作,计算器不会把式子传入内部,而是提示用户错误。(处理异常)
异常是程序运行过程的产生的错误,这要区别不是语法错误。
我们可以看出程序正常工作严格来说应该包括:一是编码是正确的,二是用户(人或者其他程序)正常调用程序。
按照不同的阶段错误分两种:一种是编码阶段的错误,大多来自编码语法错误;另外一种不正常调用程序产生的错误,而这种错误我们称之为异常。
你可以简单理解,异常不是来自编码阶段,而是调用程序阶段。
2、异常的机制
异常机制让程序只做能做的事情,凡是处理过程出现错误都抛出异常,让用户来处理修正这个错误。是我们人类习惯做法,不是发明出来机制。
异常机制主要是为了保护程序的正常运行,而不惜抛出一个错误给用户。
我们再举个例子
在学校饭堂有一个打饭窗口,负责打饭的阿姨给每一个到窗口的人打饭。(程序编码是正确的)
你到打饭窗口要求打一份菜。(不能阻止异常,且发生异常)
阿姨跟你说这里不提供打菜服务,打菜在另外一个窗口。(处理异常)
处理方式 | 结果 |
---|---|
不处理异常 | 饭堂阿姨直接崩溃了或者阿姨没发现有菜间接崩溃了。 |
不处理异常 | 阿姨没给你打菜,而是给你打了饭。(按照既定功能执行,程序正常运行但是给了错误结果) |
处理异常 | 叫你滚,然后叫下一个。(处理异常但不提示错误,忽略错误保证程序正常) |
处理异常 | 跟你说这里不提供打菜服务,打菜在另外一个窗口。 |
异常通常是用户没有按照约定规则产生错误。
通常处理方式是向用户反馈这个异常,让用户处理,目的是让用户修正这个错误。
在打饭的窗口打菜,这个是你的问题,而不是阿姨的问题,最好处理就是告诉你这里不能打菜。
3、异常处理方式通常是抛出异常。
例外是堵不住,最好做法就是当程序处理不了就把所有错误反馈给用户。
用户规范操作才是解决问题根源。
异常处理机制有点像保护机制,异常很多,我们很难知道所有例外情况并一一处理。
就像阿姨不可能知道所有情况,通常不合理,最好的做法是不打饭并提示正确操作。
序号 | 异常情况 |
---|---|
1 | 比如你没拿饭盆打算用手来接饭 |
2 | 比如你到窗口问路 |
3 | 比如你站很远时候 |
4 | 比如你要1000斤的饭 |