java程序设计与问题解决(高级篇)-读书笔记-1

异常处理允许读者为程序的正常情况单独设计和编写代码,并与不正常情况下的处理代码分开


throw语句的作用类似一个方法调用,但它并没有去调用一个方法,而是调用了catch块

 

预定义的异常类Exception是所有异常类的祖先,我们也可以定义自己的异常类

 

如果程序试图使用一个越界的数组索引,就会抛出一个ArrayIndexOutOfBoundsException异常,除非在一个catch块中把这个异常捕获,否则程序就会结束。对于这种特殊的异常,通常不在catch中捕获它。这种异常说明代码有逻辑错误,需要更改代码而不是捕获异常,因此这种异常通常起到运行时提示错误的功能,而不是异常的功能

 

自定义异常类时,构造器通常是仅有的不是从基类中继承的方法

 

在定义异常类时,应当保留getMessage不变,为了保证这个功能,应当在自定义异常类的构造函数中调用super(message);

public MySpecialException(String message)

{

       super(message);

       …

}

 

如果要在自己的代码中插入throw语句,最好定义自己的异常类,这样当自己的代码捕获一个异常时,多个catch块可以区分自己的异常和预定义的类中的方法抛出的异常,这样能更精确的捕获异常已经做异常处理(领会精神)

 

声明异常(类比推脱责任)

加入有个方法methodA声明如下:public void methodA() throws DivideByZeroException

在这种情况下,methodA就免除了捕获在其执行期间所抛出的任何DivideByZeroException类型的异常的责任;而输入有一个methodB方法中包好对methodA的调用,则methodB必须捕获并处理这个异常

 

如果一个方法抛出了异常,而这个异常没有在此方法中被捕获,则这个异常抛出后,该方法的调用立即结束

 

如果某个方法在其throws子句中列出了一个异常,且某段代码中有对该方法的调用,则代码必须捕获此异常或者在throws子句中声明此异常

 

如果在派生类中重定义某方法,则重定义的方法的throws的子句不能包含基类中同一个方法的throws子句中没有列出的异常,但是可以减少重定义的方法的throws子句中声明的异常

 

断言检测失败时会抛出AssertionError类的异常,一般这个异常不会被某个catch块捕获,但是如果愿意,可以将其捕获,只是这种做法不常见

 

Error类或RuntimeException类的子孙类异常不需要被catch块捕获或被throws子句声明,其实这些类并不是异常,只是其表现类似异常,因此也把它们看做异常

 

对于多重抛出和捕获,首次捕获时需捕获更明确的异常

 

throw语句并不是抛出异常的唯一一种语句。方法调用也能抛出异常。(明确的说,方法调用可以抛出其throws子句中声明的异常)

 

如果可以用别的方法容易解决问题,就不要抛出异常

 

大多数情况下,throw语句应当用在方法内且在该方法的throws子句中声明,也就是把抛出异常和捕获异常分离到单独的不同方法中去

 

在catch块内抛出异常是合法的

 

在普通的Java应用程序中没有捕获的异常会使程序在显示一个错误信息之后结束但在GUI程序中(Jframe GUI或applet)的未捕获异常不会使程序结束,而且除非你去捕获异常,否则GUI程序可能无法应付该异常,用户也会很茫然,因此GUI程序中确保所有抛出的异常都被捕获尤其重要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值