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

posted @ 2022-08-17 22:17  微醺的小布  阅读(55)  评论(0)    收藏  举报