《数据结构与抽象:Java语言描述(原书第4版)》一JI2.3 抛出异常
本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 着 罗得岛大学 新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
JI2.3 抛出异常
虽然处理异常的能力十分有用,但知道如何抛出异常也很重要。本节来看看如何抛出异常。应该仅在方法内,当你不能使用合理的方式来解决不正常或意外事件的情形下,才抛出异常。
throw语句。方法执行throw语句就抛出一个异常。一般的形式是
不是使用一条单独的语句来创建异常对象,程序员通常在throw语句中创建对象,如下面这个例子:
这个语句创建类IOException的一个新对象并抛出它。与应该尽可能地捕获具体异常一样,抛出异常也应该尽可能地具体。
虽然可以调用异常类的默认构造方法,比如在前一个例子中所做的那样,但我们也能提供带字符串参数的构造方法。由此产生的对象的数据域将含有该字符串,且在处理异常的catch块中可以使用这个对象和这个字符串。然后catch块可使用异常的方法getMessage来获取这个字符串,如之前所见。默认构造方法为这个字符串提供默认值。
语法:throw语句有下列语法:
其中exception_object是异常类的一个实例,它一般通过调用类的两个构造方法之一来创建:
通过异常的方法getMessage,在捕获异常的代码段中,可使用默认构造方法提供的字符串或字符串message。
设计决策:如果发生了不常见的情况,应该抛出异常吗?
- 如果可以通过合理的方式解决不常见的情况,则可能使用判定语句而不是抛出一个异常。
- 如果对不正常情况的几种解决办法都是可行的,且你想让客户来选择,则应该抛出一个受检异常。
-
如果程序员因不正确地使用你的方法而使代码出错了,则你可以抛出一个运行时异常。但是,如果只是为了不让客户去处理它,则不应该抛出一个运行时异常。
程序设计技巧:如果方法含有一个抛出异常的throw语句,则在该方法头添加一个throws子句,而不是在方法体内捕获异常。一般地,抛出异常及捕获异常应该在不同的方法内。
程序设计技巧:不要弄混关键字throw和throws
在方法头中用Java保留字throws来声明这个方法可能抛出的异常。在方法体中用保留字throw实际抛出一个异常。
最后更新:2017-06-26 18:32:08