`

Java如何合理的设计异常?

阅读更多

译注】

        异常设计一直让我头疼不已,《Thinking in Java》中有关于异常设计的内容,但并不是很详细;《Effective Java》中应该有详细介绍吧,但一直没有精力来啃此书。八天前在JavaWorld电子杂志上发现这篇八年前的文章,有一种相见恨晚的感觉,一看作者竟是Bill Venners(前段时间拜读他的《深入Java虚拟机》),遂惶恐译之。

 

【摘要】

        本文是设计技术专栏文章,讨论有关异常设计的问题。本文关注何时使用异常,并举例演示异常的恰当使用。此外,本文还提供一些异常设计的基本原则。

 

        五个月前,我开始撰写有关设计对象的文章。本文是设计文技术系列文章的延续,讨论了有关错误报告和异常的设计原则。我假设读者已经知道什么是异常,以及异常是如何工作的。你若想回顾一下异常方面的知识,请阅读本文的姐妹篇《Java异常》。

 

【异常的好处】

        异常带来诸多好处。首先,它将错误处理代码从正常代码(normal code)中分离出来。你可以将那些执行概率为99.9%的代码封装在一个try块内,然后将异常处理代码(这些代码是不经常执行的)置于catch子句中。这种方式的好处是,正常代码因此而更简洁。如果你不知道如何处理某个方法中的一个特定错误,那么你可以在方法中抛出异常,将处理权交给其他人。如果你抛出一个检查异常(checked exception),那么Java编译器将强制客户端程序员(cilent programmer)处理这个潜在异常,或者捕捉之,或者在方法的throws子句中声明之。Java编译器确保检查异常被处理,这使得Java程序更为健壮。

 

【何时抛出异常】

        异常应于何时抛出?答案归于一条原则:“如果方法遇到一个不知道如何处理的意外情况(abnormal condition),那么它应该抛出异常”。不幸的是,虽然这条原则易于记忆和引用,但是它并不十分清晰。实际上,它引出了另一个的问题:什么是意外情况?这是一个价值6.4万美元的问题。是否视某特殊事件为“意外情况”是一个主观决定。其依据通常并不明显。正因为如此,它才价值不菲。

 

        一个更有用的经验法则是:“在有充足理由将某情况视为该方法的典型功能(typical functioning )部分时,避免使用异常”。因此,意外情况就是指方法的“正常功能”(normal functioning)之外的情况。请允许我通过几个例子来说明问题。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics