改进异常处理的6条建议-java开发java经验技巧

改进异常处理的6条建议-java开发java经验技巧

ID:32977525

大小:58.27 KB

页数:6页

时间:2019-02-18

改进异常处理的6条建议-java开发java经验技巧_第1页
改进异常处理的6条建议-java开发java经验技巧_第2页
改进异常处理的6条建议-java开发java经验技巧_第3页
改进异常处理的6条建议-java开发java经验技巧_第4页
改进异常处理的6条建议-java开发java经验技巧_第5页
资源描述:

《改进异常处理的6条建议-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、改进异常处理的6条建议-Java开发Java经验技巧改进异常处理的6条建议木文由ImportNew・唐尤华翻译自northconcepts0欢迎加入翻译小组。转载请见文末要求。合理地使用异常处理可以帮你节省数小时(甚至数天)调试时间。一个乘法异常会毁掉你的晚餐乃至周末计划。如杲处置不及时,甚至对你的名誉都会造成影响。一个清晰的异常处理策略可以助你节省诊断、重现和问题纠正时间。下而是6条异常处理建议。1.使用一个系统全局异常类不必为每种异常类型建立单独的类,一个就够了。确保这个异常类继承RuntimeException,这样可以减少类个数

2、并月.移除不必要的异常声明。我知道你正在想什么「如果类型只有一个,那么怎么能知道异常具体是什么?我将如何追踪具体的属性?请继续阅读。2・使用枚举错误码我们大多被教授的方法是将异常转为错误信息。这次查看H志文件时很好,(呃)但是这样也有缺点:1.错谋信息不会被翻译(除非你是Google)2.错误信息不会转换为用八友好的文字3.错误信息不能用编程的方式检测将异常消息留给开发者定义也会出现同样的错误有多种不同的描述。一个更好的办法是使用枚举表示异常类型。为每个错误分类创建一个枚举(付款、认证等),让枚举实现ErrorCode接口并作为异常的一

3、个属性。当抛出异常时,只耍传入合适的枚举就可以了。thrownewSystemException(PaymentCode.CREDITCARDEXPIRED);现在如杲需要测试异常只要比较异常代码和枚举就可以了。}catch(SystemExceptione){if(e.getErrorCode()二二PaymentCode.CREDIT_CARD_EXPIRED){•••}}通过将错误码作为查找资源的key就可以方便地提供友好的国际化文本。publicclassSystemExceptionExample3{publicstaticv

4、oidmain(String[]args){System,out.printin(getUserText(VaiidationCode.VALUE_TOO_SHORT));}——publicstaticStringgetUserText(ErrorCodeerrorCode){if(errorCode二二null){returnnull;}Stringkey二errorCode.getClass().getSimpleName()+〃_〃+errorCode;RcsourceBundiebundie二RcsourccBundie.gct

5、Bundie("com.northconeepts.cxccption.example,cxccpti〃ons);returnbundle.getString(key);3.为枚举添加错误值在很多吋候可以为异常添加错误值,比如HTTP返回值。这种情况下,可以在ErrorCode接口添加一个getNumber方法并在每个枚举中实现这个方法。publicenumPaymentCodeimplcmentsErrorCode{SERV1CE_T1MEOUT(1O1),CREDIT_CARD_EXPIRED(102),AM0UNT_T00_HI

6、GH(103),INSUFFICIENT_FUNDS(104);privatefinalintnumber;privatePaymentCode(intnumber){this.number=number;}©OverridepublicintgetNumber(){returnnumber;添加错误码可以是全局数值也可以每个枚举自己负责。你可以宜接使用枚举里的ordinal()方法或者从文件或数据库加载。4.为异常添加动态属性好的异常处理述应该记录相关数据而不仅仅是堆栈信息,这样可以在诊断错误和重现错误时节省大量时间。用户不会在你的应

7、用停止工作时告诉你他们到底做了什么。最简单的办法是给异常添加一个java.util.Map字段。新字段的职责就是通过名字保存相关数据。通过添加setter方法可以遵循流式接口。可以像下而示例这样添加相关数据并抛出异常:thrownewSystemException(ValidationCode.VALUETOOSHORT).set(〃field〃,field).set(〃value〃,value)・set("min-length",MINJLENGTII);3.避免不必要的嵌套冗长的堆栈信息不会有任何帮助,更糟糕的是会浪费你的吋间和资源

8、。重新抛出异常时调用静态函数而不是异常构造函数。封装的静态函数决定什么时候嵌套异常什么时候只要返回原來的实例。publicstaticSystemExceptionwrap(Throwableexcepti

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。