博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《数据结构与抽象:Java语言描述(原书第4版)》一JI2.2.1 延缓处理:throws子句...
阅读量:6905 次
发布时间:2019-06-27

本文共 1498 字,大约阅读时间需要 4 分钟。

本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

JI2.2.1 延缓处理:throws子句

假定一个方法,它返回从磁盘读入的字符串。现在先不用担心这个方法如何完成这项任务,我们将在附录E中学习如何写这样的程序。不过,要知道从磁盘读入时可能会发生错误。这件事会产生一个IOException异常。因为IOException是受检异常,所以它必须被处理。我们可以在方法体内处理异常。但有时,程序员不能肯定异常发生时怎么做对客户是最好的。是应该终止执行,还是进行其他的处理更有意义?当不能肯定要采取哪个动作时,可以让方法的客户来处理异常。只要异常能在某个地方被处理了,你就不需要在方法内来处理它。

一个方法可能引起受检异常但又不处理它,就必须在方法头声明这件事。例如,如果方法readString抛出一个IOException异常但不处理它,则它的方法头应该是如下这样的:
image

突出部分称为throws子句(throws clause)。它表明方法readString不用处理执行期间可能发生的IOException类型的异常。但如果另一个方法调用readString方法,则那个方法必须处理异常。调用方法可以自己处理IOException,也可以在它的方法头中包含一个throws子句告诉它的客户来处理异常。最终,每个抛出的受检异常都应该在程序的某个地方被处理。

你可以在throws子句中列出多个用逗号分开的受检异常。

语法:throws子句

方法头可以含有一个throws子句,它列出该方法能抛出但不处理的异常。该子句的语法如下:

image

exception-list(异常列表)中的异常名用逗号分隔。它们的次序不重要。

注:如果方法可能抛出一个受检异常,或者在方法头写throws子句声明它,或者在方法内处理它;否则,会导致语法错误。

如果方法可能抛出未检异常,则可以在throws子句中声明它,或者处理它,但也可以什么都不做。

注:javadoc标签@throws

对于方法可能抛出的每个异常,在方法头之前的javadoc注释中,应该用单独的一行来说明。每个这样的行都要以标签@throws开头,并且它们应该按异常名的字典序排列。所有受检异常必须被说明。

运行时异常可以说明也可以不说明,且一般不说明。但是,设计人员可以说明客户或许很想处理的那些运行时异常。事实上,你会在Java类库中遇到一些被说明的运行时异常。但要知道,你使用的方法或许会导致一个未说明的运行时异常。如果你决定说明运行时异常,则它们不应该依赖于方法的定义方式。所以,标出方法可能抛出的异常,应该作为设计和规格说明的一部分,而不是实现的一部分。

注:如果方法抛出一个异常但没有处理它,则方法结束执行

如果方法抛出一个异常但没有处理它,则方法的执行将结束。例如,如果前一个方法readString抛出一个IOException,则它的执行立即结束。但程序继续执行,异常传给readString的客户。

**程序设计技巧**:当定义一个可能抛出受检异常的方法时,如果不能提供对异常的合理反应,则要在方法头写一个throws子句将异常传给方法的客户。避免在throws子句中使用Exception,因为这样做,不会给其他程序员提供关于调用方法的任何有用信息。而是要尽量指明异常。

转载地址:http://qrmdl.baihongyu.com/

你可能感兴趣的文章
2007新骗术,大家出门在外一定小心
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>
Javascript中的陷阱大集合【译】
查看>>
PHPCMS V9 分类信息模型 伪静态 htaccess的错误 附带官方分类信息htacces
查看>>
Duplicate entry ‘2147483647’ for key ‘PRIMARY’
查看>>
各种开源协议的比较与选择 [转]
查看>>
rails中的Controller Specific Assets
查看>>
宋鹏:微媒体联盟微信营销成功案例
查看>>
新一代高性能应用交付平台网络架构_林浩
查看>>
NACounter
查看>>
VMware虚拟机扩展Linux根目录磁盘空间(Centos)
查看>>
linux查看错误日志
查看>>
Redis与Memcached的区别
查看>>
无操作系统时的 LED 驱动
查看>>
JNI字段描述符
查看>>
java学习笔记之安装环境变量设置
查看>>
js事件绑定的三种方式
查看>>
Swoole源码学习记录(十二)——ReactorThread模块
查看>>
舌尖上的程序员
查看>>
Jquery实现下拉框与输入框动态切换,类似可编辑的下拉框
查看>>