第八章 程序的异常
8.1 异常声明,捕获和处理
异常是组织方法继续执行的问题,可能导致程序失败或出现程序崩溃。
8.1.1 异常机制概述
编译错误:编写的程序存在语法问题,未能通过编译
运行错误:在程序运行过程中产生的错误
1.什么是异常
程序运行过程中遇到的非致命的,通过某种修正后还能执行的错误成为异常。
2.产生异常的几种情况
(1)虚拟机检测到的异常
*表达式的计算违反了Java的语义。
*超出了某些资源限制,如使用了太多内存。
(2)Java程序代码中的throw语句被执行
(3)异步异常发生
*Thread的stop方法被调用
*Java虚拟机内部错误发生
3.异常处理的关键字
Java异常处理通过5个关键字来管理,它们是try、catch、throw、throws、finally。
Java中的异常类有一个父类叫做Throwable,有两个子类为Error、Exception。
(1)Error异常
Error指的是错误,通常不可以通过代码来解决。在程序中用户不用那个捕获Error及任何Error子类的异常。
Error包括linkageError(综合错误)与VitualmachineError(虚拟机错误)两个子类
(2)Exception异常
Exception类型的异常有分为运行时异常和非运行时异常。
*运行时异常
继承自RuntimeException
Java编译器允许程序不做处理
*非运行时异常
在java.lang类库中定义
Java编译器要求程序必须捕获或声明抛弃这种异常。
8.1.2 在Java中如何进行异常处理
1.Try...catch...finally
捕获命名为属于异常类的异常,并调用方法处理它。其中的finally无论有无异常都会执行。
try{ //监视
可能发生一张的代码块;
}
catch(异常类型 异常对象名){ //捕获并处理异常
异常处理代码块;
}finally{
//最终执行
}
当finally带return语句时:
*因为finally语句总是执行,所以结果会是10,如果将finally中的return去掉,结果就会是5。
*finally语句可以省略
*catch语句可以有多个,并且如果用户要捕获Exception,则将Exception放在最后,不能放在前面,否则会报错。(如果要捕获异常,异常范围要按照从小到大顺序叠放)
示例:catch多个异常
一个try代码块可以嵌入到另一个try代码块中。如果内部try代码块产生的异常没有被内部try代码块相关的catch捕获,就会传到外部try代码块。
示例:try语句嵌入多个try语句
2.使用throws抛出异常
throws子句方法的基本形式如下:
[修饰符] 返回类型 方法名 (参数1, 参数2, ...) throws 异常列表()
throws子句可以同时指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛弃它们。
3.通过throw抛出异常
throw抛弃的异常必须是Throwable或其子类的实例,其基本形式如下:
throw 异常名
throw关键字主要是用在try块中,用来说明已经发生的异常情况。throw关键字后面跟随一个异常对象,用来说明发出的异常类型。
4.自定义异常
哇哇哇!!这些东西真的是看不懂了啊,第六章、第八章真的好难,明天看视频,看这本书真的是看不懂了。