» 网友学堂 » JAVA教程 » 如何编写健壮的程序
如何编写健壮的程序
作者:ljjk5 发表时间:2007-12-31 12:37 阅读:89次 在百度搜索相关内容

 以下紧为个人观点,希望大家讨论和完善,并设计较为好用的类库  编写健壮程序,首先正确的理解类库,
  考虑异常处理和输入参数校验,其次是跟踪和改进。
  概念
  程序的执行就是系统状态的变化过程,任何一个方法的执行,对象和系统会进入下一个状态。错误的发生可归结为:
  参数错误
  状态错误,方法执行的前提条件没有得到满足
  这些处理,在公有的(public)方法或类和非公有的方法或类处理中是不一样的,比如在私有的方法中,一般不用有用参数校验,因为它的调用者通常是程序的编写者自己。但输入参数是否为空对象,可以在调用之前进行诊断,然后进行相应的处理(或者不判断但系统会引发运行时错误)。
  参数校验一般是指用户输入和应用程序的调用时的参数输入校验,前者应该为程序必须处理的可恢复的异常,后者通常导致程序的执行逻辑产生的运行时异常,如典型的数组越界和空指针,一般在程序的设计中有一般的处理方式,在java中抛出IllegalArgumentException或进行错误翻译到适当的抽象层次进行抛出。
  异常一般有三种级别:
  可恢复,被检查的异常,这类是调用应用程序必须处理的,我们写程序处理的多半为这种异常。
  运行时错误,绝大部分为不可恢复的异常。此种异常的抛出时,通常调用的功能不能成功的执行,但不是严重的,应用程序不会崩溃。这类异常的处理就非常重要,它会影响你程序的失败范围。
  非常严重的错误,它可能会导致整个应用程序崩溃,在JAVA中通常抛出为ERROR类型错误,通常的起因为资源枯竭,环境严重错误。
  对于在应用程序的体系结构设计中,其传播途径和处理方式,大家要达成共识,
  首先为要把异常和正常区分开来,一个抛出太多异常的接口,只会使程序过度复杂,一些需要处理的异常也不能加重别人的负担。其次对用户的输入校验应该作为被检查的异常来处理,它是用户可能出现的一种情况,也是用户输入和输出接口的一部分,这类处理抛出的错误信息集中保存便于修改,并使用统一的接口进行读取,并放在公共的包类大家一起使用。
  比如在apache的java项目axis开发中Developer'sGuide建议大家如此使用
  HandleSpecificExceptionsinInnerCode
  CatchAllExceptionsinOutermostFlowofControl
  CatchingandLoggingExceptions
  下表为JAVA中最常用的异常类:
  Table1。CommonlyUsedExceptions
  ExceptionOccasionforUse
  IllegalArgumentException非法参数
  IllegalStateException对象非法状态
  NullPointerException空值参数
  IndexOutOfBound*ception下标越界
  UnsupportedOperationException没有实现的方法。
  原则
  以下为异常处理的基本原则:
  1.Useexceptionsonlyforexceptionalconditions
  只对异常情况使用异常处理,不要使用异常实现控制结构,对于经常发生的可预计事件不要采用异常
  2.Usecheckedexceptionsforrecoverableconditionsandrun-timeexceptionsforprogrammingerrors
  在可恢复的情况下抛出异常,程序错误使用运行时异常
  3.Avoidunnecessaryuseofcheckedexceptions
  避免过多的不必要的被检查的异常
  4.Favortheuseofstandardexceptions
  尽量使用标准异常
  5.Throwexceptionsappropriatetotheabstraction
  异常的抛出有正常的抽象级别
  6.Documentallexceptionsthrownbyeachmethod
  使用文档记录抛出的异常,例如JAVADOC@exceptionnamedescription
  7.Includefailure-captureinformationindetailmessages
  包括错误的详细信息
  8.Striveforvetbfailureatomicity
  使失败原子性,不要让程序在不正确的状态,比如出错事务回滚
  9.Don'tignoreexceptions
  不要忽视(不处理)异常
  设计
  设计的目标为统一和规范化错误处理的流程,设计统一的共用类,大家进行统一调度。为了达到以上目标使用如下的原则:
  1错误的详细信息统一保存
  2用户的输入校验,网页只处理是否为空和去掉头尾空格,客户断逻辑进行类型转换,业务逻辑层进行校验,然后查询错误信息,使它成为最终的详细的错误信息返回给用户。
  3异常的产生,调用者对非用户输入参数校验和状态错误产生的异常,使用第5和第7条规则
  错误信息表
  4当然跟踪和诊断也是不可少的

#Advertisement