《Java核心技术(卷一)》读书笔记——第十一章:异常处理

Exception

1.      异常处理的理想目标

通知用户发生了错误

保存当前的工作结果

允许用户妥善的退出程序

2.      异常处理的任务

转移程序的控制权:Exception——>Exception Handler

3.      异常处理的大致流程

方法立即退出,剩余代码不执行,不返回值

调用该方法的代码也无法执行

搜索Exception Handler处理异常

4.      异常的层次结构和分类

Throwable = Error + Exception ( IOException +RuntimeException )

Error:Java运行时系统的内部错误和资源耗尽错误,不可控的错误

RuntimeException:程序错误,程序员的错误,

IOException:其他异常

Unchecked Exception:Error +RuntimeException

Checked Exception:IOException

编译器将核查是否为所有Checked Exception提供了 Exception Handler,否则报错

5.      异常的动作:声明,抛出,捕获

声明throws:

当调用一个抛出已检查异常的方法

当方法本身抛出已检查异常

抛出throw:

          当程序运行过程中发现错误

          光抛出不处理,要声明

          既抛出又处理,即捕获

捕获try-catch:

捕获了异常,异常不被抛出到方法之外,也就无须声明

6.      创建自己的异常类

1.      默认构造器

2.      带有描述信息的构造器

7.      传递异常( 声明throws )还是处理异常( 捕获try-catch )?

后果:如果一个异常不被捕获,程序(线程)将终止执行,控制台打印异常信息。

若方法A调用了一个抛出已检查异常的方法B,要么在方法A中处理;要么方法A传递给更高层的调用者。

到底是传递还是处理,取决于方法A是否具备处理能力

8.      如果子类覆写超类方法,则子类方法声明的已检查异常不能比父类更通用,换句话说,不允许在子类的throws说明符中出现超过父类方法所列出的异常范围。

愈通用:不声明——》声明特定异常——》声明通用异常

如果父类方法未抛出/声明异常,则子类的覆写方法必须捕获所有的已检查异常

9.      同一个catch子句中捕获多个异常

要求:异常处理的动作相同 && 捕获的异常类型之间彼此不存在子类关系

捕获多个异常时,异常变量隐含为final变量,不能在子句体中为e赋不同的值

10.  异常链

在catch子句中再次抛出一个异常,以改变异常类型

如果在一个方法中发生了一个已检查异常,而不允许抛出它。则可以利用包装技术,捕获该异常,并将其包装成一个运行时异常。

11.  finally子句

在try语句块中的方法真正返回前,还要执行finally子句中的内容。所以,finally子句中的return值会覆盖try语句块中的return值

同时,若按照上述的代码书写方式,finally子句中抛出的IOExceprion会覆盖try语句块中的IOException

12.  带资源的try语句

要求:资源必须实现AutoCloseable接口(Closeable接口)

同时,try语句体中的原始异常会重新抛出,而close方法的异常会被“抑制”

(由系统自动捕获,并由addSuppressed方法增加到原始异常。可以调用getSuppressed方法,得到从close方法抛出的被抑制的异常列表)

13.  堆栈跟踪stack trace

stack trace:一个方法调用过程的列表,包含程序执行过程中方法调用的位置

14.  这是一种什么问题?

编译器跟踪e来自try块,假设该try块中仅有的checked Exception是SQLException实例,且,假设e在catch中未发生改变,则将外围方法声明为throws SQLException是合法的

15.  例题:

分析:

代码未抛出异常

1,2,5,6

抛出一个IOException异常

1,3,4,5,6——catch子句未抛出异常

1,3,5——catch子句中抛出异常给调用者

抛出非IOException异常

1,5,异常被抛回给方法的调用者

 

16.  throw和throws的区别

throw:抛出java.lang.Throwable类的对象

例:throw new IllegalArgumentException(“参数错误”);

throws:声明方法可能会抛出的异常类型

Java中,任何未被处理的checked Exception强制在throws子句中声明

17.   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值