Three Rules for Effective Exception Handling
Author:Jim Cushing[12/04/2003]
Translator:Leon·He
Java的异常处理机制提供了一个统一的机制来识别和响应程序错误.一个有效的异常处理方法可以使得你的程序健壮并易于调试.因为异常可以对我们解答下面这些问题提供些帮助,因此它是一个对我们极有用的调试工具.
错误是什么?
什么地方发生错误?
为什么发生错误?
(即:3W what、where、why)
当异常使用恰当时,所抛出异常的类型可以表明什么程序错误发生了,而Stack Trace可以告诉我们什么地方发生了错误.至于为什么发生错误则可以通过看异常信息和Stack Trace来了解.如果你发现你的异常不能回答以上所有问题,那一定是你没有把它们用对.当调试程序时,有三个原则将会帮助你更好的使用异常即:具体化、早throw及晚Catch.。
为了说明异常处理的这三个原则,我们将讨论一个叫作JCheckbook的虚拟个人财务管理系统。Jcheckbook可以用作记录和追踪银行帐户的活动,比如存款、取款及开支票。Jcheckbook最初的版本以桌面程序运行,但未来的计划要求以HTML和C/S Applet 做为客户端的实现。
具体化
JAVA定义了异常类的层次结构,从Trowable开始, Error和Exception则继承于它,而RuntimeException则继承了Exception.如图所示:
这四个类的抽象层次都很高,它们对了解到底程序发生了什么帮助极少,当你有权实例化这些类的时候,最好将它们视为基类,而使用更特殊的子类,JAVA提供了相当数量的异常子类,并且你也可以对一些特殊的情况定义自己的异常类。
比如说,JAVA的IO包定义了继承于Exception的IOException类,更特殊一点就是FileNotFoundException,EOFException,,ObjectStreamException和所有的IOException的子类。每个异常类都描述了一种特定的与IO有关的错误,它们分别表示:文件丢失,文件意外结束,或者一个被破坏的序列化对象流。异常类越具体,对回答程序发生了什么错误就越有帮助。
在Catch异常时,捕捉具体的异常类显得特别重要,比如,Jcheckbook遇到FileNotFoundException可能会要求你提供另外一个文件。如果是EOFException,程序可能继续运行,只不过提示一下在异常抛出之前文件是可以被正确地读出来的。如一个ObjectStreamException异常抛出了,程序则可能通知用户所读的文件已经被破坏了,并且要求需要提供一个备份或其它的文件。
Translator comments
:
这也就是为什么要将异常类分类,以此让每个类特定地代表一种程序错误的原因?同时也是为什么在方法声明中throws某个特定的异常类,而不是如:throw Exception?也是为什么要在Catch中捕获具体的异常对象,而不是形如:try{}catch(Excetion e ){}的原因?
因为在JAVA中,一个try程序块是可以指定多个Catch块,因此就很容易去捕捉具体的异常,然后针对不同的异常提供相应的处理方案。
File prefsFile = new File(prefsFilename);
try
{
readPreferences(prefsFile);
}
catch (FileNotFoundException e)
{
// alert the user that the specified file
// does not exist
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有