1,"YYYYMMdd"与"yyyyMMdd"的区别。
y与Y的区别如下图所示:
Y表示本周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。
例子可见下图(网上找,侵删):
2,使用集合的时候注意IndexOutOfBoundsException异常和NullPointException异常
经常出现在 X.get(i),X.remove(i)等等,当使用这些下标类的方法时考虑下,对应集合是否会出现数组下标越界异常和空指针异常。
思考
判断集合为空的方法,CollectionUtils.isEmpty()方法与list.isEmpty()的区别?
先说结论:**list.isEmpty()会报空指针异常,但是CollectionUtils.isEmpty()不会。**看下图
https://blog.csdn.net/merryxuan/article/details/82871978 这篇文章下面一个兄弟做的比喻很生动好理解。
最后,我们看一下两者的源码。
CollectionUtils.isEmpty():
ArrayList.isEmpty():
显然,CollectionUtils.isEmpty()会判断对应的集合是不是空,或者集合的size是不是等于零。而list的判空方法只会判断size是不是等于零。而当list本身为空的时候,list.isEmpty()方法就会报空指针异常。
3,代码中避免魔法值
写代码的时候直接把一些数值或者字符串,直接写在程序中,业务上不好理解,修改的时候不好修改。可参考下面这个文档:
https://zhuanlan.zhihu.com/p/135286382?from_voters_page=true
在实际的项目里,现在用到的三种方法:
- 写成静态变量
- 枚举类型,适用于一类变量具有多个值
- 写在配置文件中,适用于后期可能要改的一些参数。
4,日志和异常
日志不要随便写,异常不要随便抛。
日志要能清楚的描述出问题代码,问题发生的原因,以便好找到bug原因。
抛出异常时,上层要有处理的,才有抛得必要,不要在最上层代码随意抛出异常,更应该报出异常问题和位置。异常只能用于错误处理,不应该用来控制程序流程。
tips:定时任务不要随便抛异常。一是因为定时任务是最上层的东西,没有必要抛异常,抛了也没人接。二是抛异常时会创建一个新的对象有可能会影响定时任务的线程,造成其他的问题(这块还没具体遇到过)。
5,在for循环内还是外new对象
这个问题开始看人总结,说是为了内存考虑,应该在外:
Object obj = null;
for (int i = 0; i <= count; i++) {
obj = new Object();
}
但是多搜索,查看不同想法,能得到更多启发:https://www.zhihu.com/question/31751468 这里面的回答,很多可以去自己去验证。
但是根据HashMap的源码,以后还是会写在里面:
6,try catch 嵌套问题
https://www.cnblogs.com/zhangchengye/p/5674240.html
当内层catch 可以捕获到异常时,外层catch就不再捕获异常。
别人总结的更多的注意问题:
https://blog.csdn.net/chaishen10000/article/details/89509577