阻塞
- 不可能的转换
- 使用equals()方法比较类型不通的数组
- 硬编码了数据库密码
- 性能 - URL的equals 和 hashCode 方法会被堵塞 http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-hashcode-make.html
- 性能 - URL的Maps 和 sets可能是性能大问题
- 错误用法 - close()调用了一个永远是null的值
- 错误用法 - equals方法一直返回false或者true
- 错误用法 - null值一定会被调用
- 错误用法 - 一个已知的null值被检测它是否是一个类型的实例
- 错误用法 - 集合转换为数组元素时发生的类型转换错误
严重
- Switch语句中一个case失败以后进入了下一个case
忘记break;
语句 - switch语句失败抛出异常导致无用的存储
忘记break;
语句,导致无用的对象存储String status = ""; Switch(Type) case 1: status = "Hello Wolrd"; case 2: status = "Hello new Wolrd";
- volatile的自增操作不是原子的
java语言中++
,--
都不是原子操作,如果有多个线程同时操作该变量,会有问题 - 不良实践 - 怀疑进行了引用比较
==
==
用于简单数据的比较;如果用于对象,其实比较的是对象的内存地址。 - 不要catch Throwable
Throwable
是所以错误类的基类,Exception
是所有异常类的基类,允许catch Exception,但是不允许捕获Throwable
,否则连oom这种错误都不会抛出。 - 使用错误 - 使用equals()比较不同类型
- 性能 - keySet迭代是低效的,使用entrySet代替
entrySet遍历方式获取Value对象是直接从Entry对象中直接获得,时间复杂度T(n)=o(1);
keySet遍历获取Value对象则要从Map中重新获取,时间复杂度T(n)=o(n) - 性能 - 方法在循环中使用+进行字符串拼接
字符串String,实在内存中新开辟空间存储。推荐使用StringBuilder
类。 - 无条件的if语句
if(true)
或者if(false)
的情况 - 破坏的null检测
if(null==name || name.equals("Tom"))
- 高危 - 通过一个实例方法更新静态属性
- 错误用法 - 调用了null指针
- 高危 - 在两个switch语句或者分支中使用了相同的代码
- 高危 - 对一个已知不是null的值重复进行空值判断
- 高危 - 没有判断readLine()的结果是否为空
- 高危 - 未用的局部变量
- 多线程错误 - 同步static String可能导致死锁
private static String username = "Hello world"; public void doSomeThing() { synchronized(username) { ... } }
- 错误用法 - 可能出现空指针引用
- 性能 - 巨大的字符串常量在多个类文件中间重复了
- 高危 - 调用substring(0)会返回原值
转载请保留链接地址: https://www.yeetrack.com/?p=1118
近期评论