...
【规范】 不允许任何魔法值( 即未经定义的常量 ) 直接出现在代码中。
反例:
| 信息 |
|---|
String key =” Id # taobao _”+ tradeId; cache . put(key , value); |
#格式规约
【风格】单行太长需换行
【风格】方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。相同业务逻辑和语义之间不需要插入空行。
...
【强制】不要在 foreach 循环里进行元素的 remove / add 操作。 remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。
反例:
...
| 信息 |
|---|
List<String> |
...
a |
...
= |
...
new |
...
ArrayList<String>(); |
...
a.add( |
...
“1”); |
...
a.add( |
...
“2”); |
...
for |
...
(String |
...
temp |
...
: |
...
a) |
...
{ |
...
if( |
...
“1”.equals(temp)){ |
...
a.remove(temp); |
...
} } 说明:以上代码的执行结果肯定会出乎大家的意料,那么试一下把“1”换成“2”,会是同样的结果吗?(java.util.ConcurrentModificationException) |
...
正例: |
...
Iterator<String> |
...
it |
...
= |
...
a.iterator(); |
...
while(it.hasNext()){ |
...
String |
...
temp |
...
= |
...
it.next(); |
...
if(删除元素的条件){ |
...
it.remove(); |
...
} } |
【规范】集合初始化时,尽量指定集合初始值大小。 说明: ArrayList 尽量使用 ArrayList(int initialCapacity) 初始化。 【规范】使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。 说明: keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出 key 所对应的 value。而 entrySet 只是遍历了一次就把 key 和 value 都放到了 entry 中,效 率更高。 如果是 JDK8,使用 Map.foreach 方法。
【强制】高度注意 Map 类集合 K/V 能不能存储 null 值的情况,如下表格: |
...
【规范】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。
正例:
| 信息 |
|---|
public class TimerTaskThread extends Thread { super.setName(“TimerTaskThread”); |
...
|
【规范】线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
...