Java工作中的一些记录(持续更新)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值