- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chp12 异常处理
Chp12 异常处理
本章导读
异常处理,处理的是程序的错误。对于我们来说,程序出错并不是最可怕的事情,最可
怕的是程序出错为用户带来损失。例如,如果我们去ATM 机上取钱,假设输入密码和金额
之后,ATM 机没有吐出钱来,而是程序崩溃了。这个时候,我们关心的不是程序是否还能
正常运行,这台机器有多大的几率能够修复。我们关心的是,我们的账户上的余额是否被修
改了,关心的是程序崩溃了是否给我们带来了损失。
因此,异常处理不是为了让程序不出错,而是为了一旦程序出错,能够有一个相关的机
制让程序执行一些代码来减少损失。这些代码是事先写好的,只有在错误发生的时候才会运
行。就好像生活中的医院:开设医院并不能阻止人们生病,而是在人们生病之后,能有一个
地方处理人的病情,通过各种手段来让人们恢复健康从而减少健康方面的损失。
1 异常的概念和分类
首先我们来介绍一下 Java 中所有错误的分类。在面向对象的概念中,一个错误也是一
个对象,犯了一个错误,也就是创建了一个错误对象。在Java 中,有一个java.lang.Throwable
类,这个类是所有错误的父类。Java 中所有的错误类都是Throwable 的子类。
Throwable 有两个子类,一个叫做Error,一个叫做Exception。其中,Error 指的是非常
严重的错误。这种错误往往来源自 Java 底层,一旦发生这种错误,我们连减少损失的机会
都没有。例如,虚拟机运行时崩溃,这种错误就是非常典型的Error。因为虚拟机一旦崩溃,
我们完全没有办法再执行任何代码,因此也没有任何机会来做一些减少损失的操作。这就好
比当一个人如果生病了,可以去医院看病,从而减少损失。但是如果这个人死了,那无论做
什么,都已经没有挽回损失的余地了。因此,对于这种严重的底层错误,我们的态度是:不
做处理。并不是我们不想对这些错误做处理,而是我们根本没有机会对这种严重的底层错误
进行处理。
相对于Error 来说,Exception 就是指的,还不那么严重,有挽回余地的错误,这个单词
被翻译成“异常”,在Java 中的异常处理,指的就是Exception 的处理。对于 Exception 而言,
这个类有很多很多的子类,其中有一个类叫做RuntimeException,这个类也有很多的子类。
这样,所有Exception 的子类就被RuntimeException 分为两大部分:一种是Exception 的子类,
但不是 RuntimeException 的子类,被称为“已检查异常”;另一种是RuntimeException 的子
类,被称为“未检查异常”。
如果拿到一个异常类,如何分辨其是已检查异常还是未检查异常呢?只要看这个类的继
承体系:如果这个类的直接或者间接父类中有RuntimeException,则这个类是一个未检查异
常;如果没有的话,则这个类是一个已检查异常。
那这两种异常有什么区别呢?所谓的“未检查异常”,指的是在写程序过程中可以避免
的异常。可以这么来理解,之所以发生“未检查异常”,原因就是程序员写完程序以后没有
好好检查;如果程序员能够好好检查自己的代码,则这些异常都可以避免发生。下面我们就
为大家介绍一些常见的未检查异常。
import java.util.Scanner;
1
public class TestRuntimeException {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a/b);
}
}
这段代码读入两个整数,输出他们的商。乍看之下,这段代码没什么问题,但是这段代
码有一个隐患:当读入的整数b 为0 时,这段代码会输出什么?
当b 为0 时,这段代码就会产生一个异常,异常信息如下:
Exception in thread main java.lang.ArithmeticE
文档评论(0)