Skip to main content

第十章 异常

当充分利用好异常时,可以提高程序的可读性、可靠性和可维护性。如果使用不当,则会产生负面效果。本章提供了有效使用异常的指南。

69. 只针对异常的情况下才使用异常

  假如你某一天不走运的话,可能遇到如下代码: /* Horrible abuse of exceptions. Don't ever do this! */ try { int i =...

70. 对可恢复的情况使用受检异常,对编程错误使用运行时异常

  Java 程序设计语言提供了三种 throwable:受检异常(checked exceptions)、运行时异常(runtime exceptions)和错误(errors)。程序员中存在...

71. 避免不必要的使用受检异常

  Java 程序员不喜欢受检异常,但是如果使用得当,它们可以改善 API 和程序。不返回码和未受检异常的是,它们强迫程序员处理异常的条件,大大增强了可靠性。也就是说,过分使用受检异常会使 AP...

72. 优先使用标准的异常

  专家级程序员与缺乏经验的程序员一个最主要的区别在于,专家追求并且通常也能够实现高度的代码重用。代码重用是值得提倡的,这是一条通用的规则,异常也不例外。Java 平台类库提供了一组基本的未受检...

73. 抛出与抽象对应的异常

  如果方法抛出的异常与它所执行的任务没有明显的联系,这种情形将会使人不知所措。当方法传递由低层抽象抛出的异常时,往往会发生这种情况。除了使人感到困惑之外,这也“污染”了具有实现细节的更高层的 ...

74. 每个方法抛出的异常都需要创建文档

  描述一个方法所抛出的异常,是正确使用这个方法时所需文档的重要组成部分。因此,花点时间仔细地为每个方法抛出的异常建立文档是特别重要的。   始终要单独地声明受检异常, 并且利用 Javadoc...

75. 在细节消息中包含失败一捕获信息

  当程序由于未被捕获的异常而失败的时’候,系统会自动地打印出该异常的堆栈轨迹。在堆栈轨迹中包含该异常的字符串表示法 (string representation),即它的 toString 方...

76. 保持失败原子性

  当对象抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中, 即使失败是发生在执行某个操作的过程中间。对于受检异常而言,这尤为重要,因为调用者期望能从这种异常中进行恢复。一...

77. 不要忽略异常

  尽管这条建议看上去是显而易见的,但是它却常常被违反,因而值得再次提出来。当 API 的设计者声明一个方法将抛出某个异常的时候,他们等于正在试图说明某些事情。所以,请不要忽略它!要忽略一个异常...