- 积分
- 2
- 在线时间
- 104 小时
- 主题
- 194
- 注册时间
- 2017-3-23
- 帖子
- 194
- 最后登录
- 2019-5-16
- 帖子
- 194
- 软币
- 1438
- 在线时间
- 104 小时
- 注册时间
- 2017-3-23
|
在写代码的过程中,我们很容易忽略一些问题,针对这些问题动宝儿汇总了以下几点,希望可以帮助到大家:
纠结的同名
现象
很多类的命名相同(例如:常见于异常、常量、日志等类),导致在import时,有时候张冠李戴,这种错误有时候很隐蔽。因为往往同名的类功能也类似,所以IDE不会提示warn。
解决
写完代码时,扫视下import部分,看看有没有不熟悉的。替换成正确导入后,要注意下注释是否也作相应修改。
启示
命名尽量避开重复名,特别要避开与JDK中的类重名,否则容易导入错,同时存在大量重名类,在查找时,也需要更多的辨别时间。
日志跑哪了?
现象
有时候觉得log都打了,怎么找不到?
示例一:没有stack?trace!
}?catch?(Exception ex) {?log.error <http://www.yidianzixun.com/home?page=channel&keyword=error>(ex); }
示例二:找不到log!
}?catch?(ConfigurationException e)?{ e.printStackTrace; }
解决
1.替换成log.error(ex.getMessage,ex);
2.换成普通的log4j吧,而不是System.out。
启示
1.API定义应该避免让人犯错,如果多加个重载的log.error(Exception)自然没有错误发生
2.在产品代码中,使用的一些方法要考虑是否有效,使用e.printStackTrace要想下终端(Console)在哪。
忽视日志记录时机、级别
现象
存在下面两则示例:
示例一:该不该记录日志?
catch?(SocketException e) { LOG.error("server?error", e);?thrownewConnectionException(e.getMessage, e); }
示例二:记什么级别日志?
在用户登录系统中,每次失败登录:
LOG.warn("Failed to?login?by "+username+");
解决
1.移除日志记录:在遇到需要re-throw的异常时,如果每个人都按照先记录后throw的方式去处理,那么对一个错误会记录太多的日志,所以不推荐如此做;但是如果re-throw出去的exception没有带完整的trace( 即cause),那么最好还是记录下。
2.如果恶意登录,那系统内部会出现太多WARN,从而让管理员误以为是代码错误。可以反馈用户以错误,但是不要记录用户错误的行为,除非想达到控制的目的。
启示
日志改不改记?记成什么级别?如何记?这些都是问题,一定要根据具体情况,需要考虑:
在Java编程中,除了上面枚举的一些容易忽视的问题,日常实践中还存在很多。相信在不断的实践中自己就可以发现并改正。
想要知道更多相关内容关注“动力节点Java学院”微信公众号获取,想加入Java开发行业,现在动力节点Java远程基础班免费赠送学习名额,对于想学习Java编程的同学无疑是好消息,机会就在眼前,快来报名吧,名额有限,先到先得。
|
|