Java新手程序员容易犯的错误

都是我和朋友经历过的失败经验,学校里公司里都不教,只会在发现你这样写时嘲笑你的那种错误

1.原始类型和包装类星用错

比如:

Integer a=new Integer(129);

Integer b=new Integer(129);

//a==b会返回false,因为这是两个不同对象的引用

还比如:入参Integer x为null,把它赋值给int y,就会报空指针异常。

为什么要有包装类,是一个可以思考一下的问题。

2.小数计算,金额计算,掉入java浮点数的坑

我理解,最好的计算金额的方式应该是公司资金流出的地方,金额计算用int,分为单位。这样的好处是1性能好 2做除法时 / 运算是自动舍去尾数的,能省出一笔巨款。

其他需要用小数的地方,要用BigDecimal,因为java的float和double都是二进制,很难精确表示十进制数字,经常有误差。然而,只知道这些并不够,new一个BigDecimal时,一定要用字符串构造函数,千万不要用double的构造函数。因为,编译器在编译阶段就已经把你写的十进制小数转成了二进制浮点数,这样就会有误差,运行时new出来的BigDecimal就不是你想要的了。

3.DateFormate里面的yyyymmddhhmmss

刚工作时写过一个bug,发生在那年的12月31日,本应该是20151231的一条记录结果却是20161231。还好原因很快就被定位到,应该用yyyy的地方用了YYYY。两个意义有很大差别,不能理解外国人设计日期类时为什么这么搞。经过这件事,我发现不懂的接口一定不要乱用,否则翻车现场很惨烈。但后来我去了另一家公司,有一点非常好,提供了正确的工具类并强制使用,从根本上防止了小白写代码出现这样的问题。

4.空指针NullPointException容易出现的几种情况:

  • 从DB查询到的数据为null,查到以后不经过判断检查==null直接使用
  • 从HashMap等集合里取值时
  • 用list.empty()判断list为空时,list为null
  • 接口调用方传入的值为null,没有检验直接使用
  • 用String.equal("")判断字符串是否为空时候,前字符串是个null,所以应该先判断null。

5.字符串拼接

少量String拼接可以用+号,但如果量大的话要用StringBuilder.append(),如果存在并发的话要用StringBuffer。打日志时可以用String类的format()方法让各处的日志格式一致,比起+++更加优雅。

6.String.split()

用String.split()方法时参数需要转译,String[] strs = shopIds.split("\\,");并注意最后一个是否为空的问题

7.集合类的使用

要注意的点非常多,可以参见这篇文章,写的很好:

http://www.importnew.com/12074.html

8.究竟该先打包发布还是先合并代码

这方面每个部门都不太一样,说说我见过的一次事故,我有一朋友,刚从svn转用git,惯性的先合并代码到主分支,再打包发布。结果悲剧出现了,有人改了pom.xml里面一个依赖的版本,他打包时没有报错,因为只改了一行代码,他也很自信,就发布出去了,全量发布。然后诞生了我司的一个S1级别的事故。因为我是他的partner,事后我做的原因定位,至今记忆犹新。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值