1.亚信移动客户事业部Java编码规范V 1.0(6)

2019-04-13 18:34

6. 日志规范

6.1. 日志记录规范

? 规则

1) 禁止使用System.out.println()来记录日志;而是使用Logger或Log4J来记录。

示例: 错误的输出:

System.out.println(\+ listCaBillProds.size()); 正确的输出: if (log.isDebugEnabled()) { log.debug(\+ listCaBillProds.size()); } 2) 为不同日志消息选择不同级别, INFO(提示类)、DEBUG(调试类)、ERROR(错误类)。

3) 在输出日志时先进行级别判断,

示例:

if (logger.isDebuggable()){ logger.debug(...); }

21

7. 异常规范

7.1. 捕获的异常:不能忽视

? 规则

1) 捕获的异常需要处理,如果不需要在catch块中做任何响应,需要做注释加以说明。 示例: try{ inti=Integer.parseInt(response); returnhandleNumericResponse(i); }catch(NumberFormatExceptionok){ // it's not numeric; that's fine, just continue } returnhandleTextResponse(response); ? 建议

1) 在Java程序中,当出错的时候推荐使用异常处理机制,而不是使用Return Code。 2) 推荐使用自定义Exception,用来补充Java的Exception类。每个工程,都应该整理出通用的Exception在最外层予以统一处理。自定义的Exception视具体的应用情况继承不同的Exception,如:EOFException,IOException等。不推荐直接继承Exception类。

3) 由于Exception机制占用系统资源较高,并且会危害编译器的分析性能,所以不

要依赖异常进行业务逻辑控制,禁止滥用Exception。

22

8. 框架规范

8.1. APPFRAME框架

详见附件《NGCRM技术开发规范》

23

9. 开发约定

9.1. 性能优化

? 建议

1) 线程安全的情况下,使用StringBuilder替代StringBuffer,前者速度快。 2) 判断空串,使用if(str == null || str.length() == 0) 替代 if(str== null || \,前者效率高。

另推荐使用org.apache.commons.lang.StringUtils.isBlank(str),因为和if(str == null || str.length() == 0){}等价,但可读性和简洁性更好; 取反的方法StringUtils.isNotBlank(str)。

注意,StringUtils中方法 isBlank 和 isEmpty 的区别如下: StringUtils.isBlank (\StringUtils.isEmpty(\

3) 新增实体,内置类型推荐使用原子类型,原子类型不需要判断null、不需要装箱、占内存少,如int优于Integer。

4) if、else if的组合超过3个else if,考虑使用switch进行替代,效率有所提升。

不推荐的用法:

if (Constant.PAY_METHOD_CASH == payIn.getPayMethod()) { // 现金缴费 busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_CASH); } else if (Constant.PAY_METHOD_CHECK == payIn.getPayMethod()) { // 支票缴费 busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_CHECK); } else if (Constant.PAY_METHOD_CASH_CHECK == payIn.getPayMethod()) { // 现金+支票缴费 busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_CASH_CHECK); } else if (Constant.PAY_METHOD_BANKCARD == payIn.getPayMethod()) { // 银行卡缴费 busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_BANKCARD); } else if (Constant.PAY_METHOD_MOVE_POS == payIn.getPayMethod()) { // 移动POS缴费 busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_MOVE_POS);

24

} else { throw new BusinessException(ErrorCode.PAY_METHOD_IS_ERROR, payIn.getPayMethod()); } 推荐的用法: switch (payIn.getPayMethod()) { case Constant.PAY_METHOD_CASH: // 现金缴费 case Constant.PAY_METHOD_CHECK: // 支票缴费 case Constant.PAY_METHOD_CASH_CHECK: // 现金+支票缴费 case Constant.PAY_METHOD_BANKCARD: // 银行卡缴费 case Constant.PAY_METHOD_MOVE_POS: // 移动POS缴费 default: } throw new BusinessException(ErrorCode.PAY_METHOD_IS_ERROR, payIn.getPayMethod()); busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_MOVE_POS); break; busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_BANKCARD); break; busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_CASH_CHECK); break; busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_CHECK); break; busiSpecId = busiSpecManager.getBusiSpecId(BusiType.PAYMENT_CASH); break; 5) 返回值为list、map、set类型的,返回空数据结构替代返回null。 推荐的写法:

public List queryBill(Long acctId, Integer billMonth) { if (acctId == null || billMonth == null) { // 类似的还有Collections.emptyMap()、Collections.emptySet() return Collections.emptyList(); } ... return list; } 6) 与循环变量无关的逻辑,放在循环体之外。

25


1.亚信移动客户事业部Java编码规范V 1.0(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年中国软饮料行业现状及发展趋势分析 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: