各种常见Bug大集合,大家贡献吧

hellobbboy 2013-07-17 06:19:45
开发中各式各样的需求,加上设计不充分,导致coding时,时常因为时间紧张而疏忽细节,导致Bug重重。

如果刚刚结束开发,想必大家对错误记忆犹新。但当新需求一来,工期紧急,我们又会一不小心,步步为坑。

此贴旨在征集各种常见Bug,为将来开发扫清小障碍,如果再犯,那就是你的不是了。

抛砖引玉,添加有分!

Bug No.1 : 空检查
太经典了,太常见了,拿到一个引用,永远别太相信它,不然,你的控制台就会爆出NullPointException。请这样:
if(reference != null){
//operate reference logic
}
推广开来,假如你后续逻辑基于某个对象,或对象的某个值,请先检查它,判断它是否为null或""或0之类。否则逻辑可能不会按照你预计的方向发展。

Bug No.2 : 传递引用
当传递一个类引用时,一定小心,任何操作都会影响引用的对象。
ArrayList listA = new ArrayList();
ArrayList listB = listA;
这时,你对listB的操作都会修改到listA,记住,如果想用到listA的原值又不想动它,请重写clone方法:
ArrayList listB = listA.clone();
推广开来,假如你使用的面向对象语言,时刻注意,复杂类型你传递的都是他本身。

Bug No.3 : 字符串转数字
假如你写出了类似下列的代码:
int i = Integer.parseInt(s);
请记得写try catch语句,因为它有可能抛出NumberFormatException,然后你的程序就莫名其妙的挂掉了,原因是用户没按照你想到的方式输入。
推广开来,假如你进行各种数据转换,记得检查,是否转换成功。

Bug No.4 : 对字符串截取
假如你写出了下列代码:
String s_sub = s.substring(3,4);
万一s的长度没有那么长,就会爆出StringIndexOutOfBoundsException。
推广开来,假如你经行集合,数组,字符串等操作,记得先判断长度,再根据长度做操作,不然就会有各种IndexOutOfBounds的异常出现在你面前。


...全文
352 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellobbboy 2013-07-18
  • 打赏
  • 举报
回复
xiaoboey +1
hellobbboy 2013-07-18
  • 打赏
  • 举报
回复
u011422169 检查对象是否相等,"==" 和 "equals" 混淆使用. +1 这是每个Javer必修课之一,也是面试必考题之一。但是依然会有人迷糊,lz不例外。特总结如下: 基本类型:byte,short,char,int,long,float,double,boolean 比较相等,用 ==; 复杂类型:String,Date,Integer,... 比较相等,用equals; 自定义类:请重写equals方法。
hellobbboy 2013-07-18
  • 打赏
  • 举报
回复
oh_Maxy List循环时,做了remove操作。 +1 可以这么说,这是Java中著名的坑之一,下列代码看似没错,但是确会爆出ConcurrentModificationException:
ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(1);
		list.add(2);
		list.add(3);
		for (Integer integer : list) {
			if(integer == 3){
				list.remove(integer);
			}
		}
详情参看:http://www.blogjava.net/EvanLiu/archive/2008/08/31/224453.html 该Bug产生原因就是,在执行对list的操作后,没有更新跟list相关的属性,像长度之类的。 推广开来,当我们修改对象的某个属性时,同时也要更改与之逻辑相关的属性,否则就会因为一致性问题,造成奇怪的错误。
xiaoboey 2013-07-18
  • 打赏
  • 举报
回复
使用JDBC时忘记数据库连接的释放,或者异常导致关闭代码没执行,比如:

Connection conn = DriverManager.getConnection(...);
...
conn.close();  //如果前面的业务处理出错,连接不会关闭
比较靠谱的方式是使用try...finally保证连接的关闭:

Connection conn = DriverManager.getConnection(...);
try {
    ...
} finally {
    conn.close();
}
由此展开,文件的关闭,Hibernate Session的关闭,都要注意这个问题
swb338675 2013-07-18
  • 打赏
  • 举报
回复
好贴 希望继续发展 期望看到神贴的那一天 Java刚入门 我就当个坐享其成的人好了
Sanoi 2013-07-18
  • 打赏
  • 举报
回复
检查对象是否相等,"==" 和 "equals" 混淆使用.
hellobbboy 2013-07-18
  • 打赏
  • 举报
回复
hjw506848887 还有一个OutOfMemoryError,内存溢出。。。。。。。 +1 推广开来,当你new出批量对象时,或需要大批量操作数据时,要考虑下,是否有足够空间做这件事。
hellobbboy 2013-07-18
  • 打赏
  • 举报
回复
hjw506848887 用ssh常有的错误就是:找不到这个类异常,还有找不到这个方法异常。。。。。。。 +1 推广开来,如果你的程序基于配置文件,就需要检查是否配置一一对应起来了。
oh_Maxy 版主 2013-07-17
  • 打赏
  • 举报
回复
List循环时,做了remove操作。
xiars123 2013-07-17
  • 打赏
  • 举报
回复
ClassNotFoundException FileNotFoundException IllegalArgumentException
  • 打赏
  • 举报
回复
等着看最后的总结
  • 打赏
  • 举报
回复
还有IO流中,找不到路径异常。。。。。丫的,名字都忘了。。。。。。。
  • 打赏
  • 举报
回复
还有一个OutOfMemoryError,内存溢出。。。。。。。
  • 打赏
  • 举报
回复
用ssh常有的错误就是:找不到这个类异常,还有找不到这个方法异常。。。。。。。

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧