基础常用规约
命名
- 名字避免英文和拼音混用
- 驼峰式命名,类名大写开头,方法小写开头
- 常量全部大写,下划线分割
- 抽象类名使用Abstract或者Base开头;异常类Exception结尾;测试类Test结尾
- 类型与括号紧挨做数组,比如int[]
- Boolean类型属性名称避免使用isXXX,避免框架解析错误
- 包名小写,点分割
- 命名避免不规范的缩写
- 使用了设计模式,要命名时体现,比如xxxxFactory
- 接口中不免声明修饰符,public也不要,接口中避免定义变量
- 枚举类使用Enum后缀,成员名称全大写
各层命名规约:
- 获取单个对象,get前缀
- 获取列表,list做前缀
- 获取统计值,count做前缀
- 插入,save/insert做前缀
- 删除,remove/delete做前缀
- 修改方法用ipdate做前缀
常量
-
long赋值,后面跟大写的L
-
常量按照功能分开维护,而不是一个大而全的常量类
-
工程内部共享常量,放在工程的constant目录下;
包内共享的常量,放在包下单独的constant目录下
类内共享的常量,类内private static final修饰
变量:
- 变量值固定且确定范围,可以采用enum类
格式
- 小括号内容与括号没有空格
- 运算符前后有空格
- 注释,双斜线与内容有且有一个空格
- 方法调用的点和名称一起换行;多个参数的时候,逗号后换行
- 单行120个字符
- 单个方法不要超过80行
- 需要时插入一个空行分隔,没必要多个空行分隔
OOP规约
- 复写方法,需要加@Overrride注解
- 避免使用类对象引用类的静态变量或者方法,使用类名访问
- 不使用过时的类或者方法
- 用常量或者有确定的值对象调用equals,避免Null异常
- 构造方法中,禁止业务逻辑,初始化放在init方法中
- 类内方法顺序:共有方法或者保护方法,私有方法,get/set方法
- 使用StringBuilder的append方法扩展字符串;使用 “”+""的方式,每次都会new StringBuilder对象,然后执行append操作,最后toString
- 控制访问,宽泛的访问范围不利于模块解耦
集合
-
foreach,避免在foreach中对元素进行remove/add的操作。使用Iterator
List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); System.out.println(list); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if ("2".equals(item)) { iterator.remove(); } }
如果是:
List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); System.out.println(list); for (String item : list) { if ("2".equals(item)) { list.remove(item); } } 这种写法报错:ConcurrentModificationException。(但是条件是“1”就不会报错)
-
推荐使用entrySet遍历Map类集合
控制语句:
- switch块得有default
- 避免单行的编码方式,比如 if(…) 执行语句
- 高并发场景,避免使用等于做判断条件,使用大于或小于
- 避免超过3层if-else。超过的使用卫语句,策略模式,状态模式等实现
- 避免在判断条件中执行复杂语句
比如:
final boolean existed = (file.open(fileName, "w") != null) && (...)
|| (...);
if (existed) {....}
避免直接写道if条件中:
if((file.open(fileName, "w") != null) && (...) || (...)) {....}
注释
- 类,类属性,类方法的注释使用/**…*/,不得使用// …
- 抽象方法,注释,指出做什么事,实现什么功能
- 类添加创建者和创建日期
- 方法内部,单行注释使用//…,多行使用/…/注释
- 枚举类字段必须有注释
- 英文不行,用中文来注释
- 代码注释,代码会恢复使用,可以注释掉。否则就删掉
- 待办注释,TODO;错误,FIXME
其他
-
使用正则的时候,利用其预编译功能,不要在方法体内定义:
Pattern pattern = Pattern.compile("规则")
-
视图模板中避免加入复杂逻辑
-
垃圾代码及时清理