Java编程规范
1、所有整型包装类对象之间比较,全部使用equals方法
// 基本数据类型和包装类之间比较可以用 == ,因为会自动装箱
int i = 200;
Integer integer = new Integer(200);
Integer integer_2 = new Integer(200);
System.out.println(integer == i); // true
System.out.println(integer.equals(i)); // true
System.out.println(integer.equals(integer_2)); // true
System.out.println(integer == integer_2); // false
2、循环体内,字符串拼接使用StringBuilder的append方法
// 反例:每次拼接都会new一个StringBuilder对象,资源浪费
String s = "start";
for (int i = 0; i <10 ; i++) {
s = s + "hello";
}
3、使用Map的方法keySet() / values() / entrySet()返回集合对象,不能对其添加元素,否则会抛出UnsupportedOperationException异常
4、ArrayList的subList结果不可强制转为ArrayList,否则会抛ClassCaseException异常
// 说明:subList返回的是ArrayList的内部类SubList,并不是ArrayList
5、在使用Collection接口实现任何类的addAll()方法时,都要对输入的参数进行NPE判断
// 说明:因为在addAll()方法第一行是Object[] a = c.toArray();
6、集合初始化时,指定集合的初始大小
List<String> list = new ArrayList<>(2);
list.add("NDSB");
list.add("PDSB");
7、加锁与try代码块之间不能有任何语句
// 反例
ReentrantLock lock = new ReentrantLock();
try {
int i = 1 / 0; // 模拟务代码
lock.lock();
} catch (Exception e) {
} finally {
lock.unlock();
}
8、switch语句中必须写default代码块
// 说明:防止恶意攻击
9、当switch变量为String类型,且为外部参数时,必须先判null
10、if / else / for / while / do语句中必须使用大括号,即使括号内只有一行代码
11、高并发场景中避免使用“等于”判断作为中断退出的条件,尽量使用范围判断(>= ,<=)
// 举例:
// 判断剩余奖品数量等于0,活动退出,由于逻辑原因,如果数量变成负数,则活动退出不了
12、使用正则时,利用好预编译功能
// 说明:
// 不要在方法体内定义Pattern p = Pattern.compile(规则);
13、不要在finally中使用return
14、生产环境禁止使用System.out或System.err输出日志,或使用e.printStackTrace()打印堆栈
15、数据库表名、字段名必须使用小写字母
16、禁止使用count(常量)、count(列名)来代替count(*)
说明:count(*)会统计值为NULL的行,而count(列名)不会
17、最好不用boolean类型包装类,防止NPE
18、禁止用equals方法比较BigDecimal类型
19、Arrays.AsList方法,创建出来的list不能进行修改,最好别用
20、公用方法增加Bigdecimal方法参数,调用放不要传null,要传Bigdecimal.ZERO
21、Long类型再做入参的时候不能用long,要用包装类,不然如果传入的是null,还没进出方法,就报了NPE

浙公网安备 33010602011771号