科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Three Rules for Effective Exception Handling(中文)

Three Rules for Effective Exception Handling(中文)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

有经验的开发人员都知道调试程序最难的部分不是修改Bug,而是找出Bug的藏身之处。通过使用上面所讲的三个原则,你就可以使异常帮助你追踪和清除Bugs并且使得你程序更加健壮和友好。

作者:Leon_He 来源:CSDN 2008年2月28日

关键字: Exception Three Rules java

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

Java的异常处理机制提供了一个统一的机制来识别和响应程序错误.一个有效的异常处理方法可以使得你的程序健壮并易于调试.因为异常可以对我们解答下面这些问题提供些帮助,因此它是一个对我们极有用的调试工具.

错误是什么?什么地方发生错误?为什么发生错误?(即:3W what、where、why)

当异常使用恰当时,所抛出异常的类型可以表明什么程序错误发生了,而Stack Trace可以告诉我们什么地方发生了错误.至于为什么发生错误则可以通过看异常信息和Stack Trace来了解.如果你发现你的异常不能回答以上所有问题,那一定是你没有把它们用对.当调试程序时,有三个原则将会帮助你更好的使用异常即:具体化、早throw及晚Catch。

为了说明异常处理的这三个原则,我们将讨论一个叫作JCheckbook的虚拟个人财务管理系统。Jcheckbook可以用作记录和追踪银行帐户的活动,比如存款、取款及开支票。 Jcheckbook最初的版本以桌面程序运行,但未来的计划要求以HTML和C/S applet 做为客户端的实现。

具体化
JAVA定义了异常类的层次结构,从Trowable开始, Error和Exception则继承于它,而RuntimeException则继承了Exception.如图所示:

Three Rules for Effective Exception Handling(中文)


这四个类的抽象层次都很高,它们对了解到底程序发生了什么帮助极少,当你有权实例化这些类的时候,最好将它们视为基类,而使用更特殊的子类,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
}
catch (EOFException e)
{
    // alert the user that the end of the file
    // was reached
}
catch (ObjectStreamException e)
{
    // alert the user that the file is corrupted
}
catch (IOException e)
{
    // alert the user that some other I/O
    // error occurred
}
Jcheckbook为了对所捕获到的异常给用户提供比较具体和特殊点的错误信息,应用了多个Catch块。比如,如果捕获的是FileNotFoundException,它可能通知用户重新指定一个文件。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章