阅读219 返回首页    go 阿里云 go 技术社区[云栖]


《数据结构与抽象:Java语言描述(原书第4版)》一JI2.3 抛出异常

本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 着 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
JI2.3 抛出异常
虽然处理异常的能力十分有用,但知道如何抛出异常也很重要。本节来看看如何抛出异常。应该仅在方法内,当你不能使用合理的方式来解决不正常或意外事件的情形下,才抛出异常。
throw语句。方法执行throw语句就抛出一个异常。一般的形式是
image
不是使用一条单独的语句来创建异常对象,程序员通常在throw语句中创建对象,如下面这个例子:
image

这个语句创建类IOException的一个新对象并抛出它。与应该尽可能地捕获具体异常一样,抛出异常也应该尽可能地具体。
虽然可以调用异常类的默认构造方法,比如在前一个例子中所做的那样,但我们也能提供带字符串参数的构造方法。由此产生的对象的数据域将含有该字符串,且在处理异常的catch块中可以使用这个对象和这个字符串。然后catch块可使用异常的方法getMessage来获取这个字符串,如之前所见。默认构造方法为这个字符串提供默认值。
语法:throw语句有下列语法:
image

其中exception_object是异常类的一个实例,它一般通过调用类的两个构造方法之一来创建:
image


image

通过异常的方法getMessage,在捕获异常的代码段中,可使用默认构造方法提供的字符串或字符串message。
设计决策:如果发生了不常见的情况,应该抛出异常吗?

  • 如果可以通过合理的方式解决不常见的情况,则可能使用判定语句而不是抛出一个异常。
  • 如果对不正常情况的几种解决办法都是可行的,且你想让客户来选择,则应该抛出一个受检异常。
  • 如果程序员因不正确地使用你的方法而使代码出错了,则你可以抛出一个运行时异常。但是,如果只是为了不让客户去处理它,则不应该抛出一个运行时异常。

    程序设计技巧:如果方法含有一个抛出异常的throw语句,则在该方法头添加一个throws子句,而不是在方法体内捕获异常。一般地,抛出异常及捕获异常应该在不同的方法内。
    程序设计技巧:不要弄混关键字throw和throws
    在方法头中用Java保留字throws来声明这个方法可能抛出的异常。在方法体中用保留字throw实际抛出一个异常。

最后更新:2017-06-26 18:32:08

  上一篇:go  正向代理与反向代理区别
  下一篇:go  千万PV是什么意思?