• 基础
  • 命名与写法
    • 包名 小写、只用一个单词、只用单数
    • 类名 UpperCamelCase
      • 类名可以使用复数
      • 抽象类开头 Abstract或Base
      • 异常类结尾 Exception
      • 测试类以要测试类名开始,以Test结尾
      • 使用的设计模式,可以写在类名上
      • 接口类形容能力时,用形容词做名字(一般是-able, 如Translatable)
        • 实现类1: 结尾加Impl
        • 实现类2: Translatable的实现类名Translator
      • 枚举类结尾加Enum
        • 成员全大写,下划线隔开
    • 方法名、参数名、成员变量、局部变量 lowerCamelCase
      • 获得单个对象前缀get
      • 获得多个对象前缀list
      • 获得统计值前缀count
      • 插入前缀save或insert
      • 删除前缀remove或delete
      • 修改前缀update
      • 方法按顺序排列
        • 公有或保护 私有 getter/setter
    • 常量 MAX_COUNT
    • 布尔类型变量不以is开头
    • 保留字和运算符左右加空格, 参数逗号后加空格
    • 缩进用4空格
    • 杜绝不规范的缩写
      • 如 AbstractClass写成AbsClass、condition写成condi
    • 换行
      • 单行120要换行
      • 运算符、点号在下一行
      • 参数中的逗号在上一行
      • 括号前不换行,如append(“a”)的括号前
    • 空行
      • 执行语句组、变量定义语句组、业务逻辑或不同语义之间插入空行
        • 相同业务逻辑和语义间不要空行
    • 领域模型
      • POJO是 DO/DTO/BO/VO 的统称,禁止命名xxxPOJO
      • 数据对象 xxxDO
      • 数据传输对象 xxxDTO
      • 展示对象 xxxVO
    • ide的text file encoding设置为utf-8, 文件换行用unix格式
    • 类成员和方法,访问控制从严
    • 构造方法不加业务逻辑
    • POJO类要实现toString (避免继承)
    • 接口类
      • 接口类中方法和属性,不要加修饰(如public),
      • 尽量不定义变量和default实现
    • 枚举类
      • 变量值在一范围内变化的,用Enum类,有延伸属性的(如MONDAY(1)),用Enum类
  • 方法
    • 覆写方法一定加@Override,可判断是否覆盖成功
    • 过时方法要加@Deprecated,并写明新接口是什么
    • 可变参数只用在ids之类的地方
    • 不使用过时方法
  • 变量
    • 常量
      • 不要定义一个总常量类,应分类定义单独的类
      • 共享常量
        • 跨应用,放在二方库,如client.jar中的constant目录
        • 应用内,放在一方库modules中的constant目录
        • 子工程内部,放在子工程的constant目录
        • 包内,放在包的constant目录
        • 类内,在类中定义private static final
      • 不写魔法值,如key=“Id#toabao”
      • long型赋值用大写L, 如Long a = 2L
    • 数组 String[] args,而不是String args[]
  • 控制语句
    • switch中,case要么有break/return,要么注释执行到哪个case。switch都要有default
    • 不要省略大括号
    • 尽量少用else,用卫语句(只有一个if)或状态模式
    • 条件判断只调用getXxx/isXxx,运算赋值给布尔变量判断,提高可读性
    • 循环体中语句考量性能
    • 参数校验场景
      • 调用频次低的方法
      • 执行时间大的方法
      • 需要极高稳定性和可用性
      • 对外开放接口
      • 敏感权限入口
    • 不需参数校验场景
      • 可能被循环调用 # 要注明外部参数检查
      • 底层方法,如DAO
      • private方法明确入参已校验
  • 注释
    • 自解释代码少注释,注释要反应设计思想与代码逻辑,描述业务含义
    • 类、类属性、类方法使用/*内容/ # Javadoc规范
    • 抽象方法要Javadoc注释,除返回值、参数、异常说明外,还要指出做什么事,实现什么功能
    • 类要添加创建者
    • 枚举类型都要注释
    • 用中文说清楚
    • 注释要跟进修改
    • 注释掉的代码要有说明
    • 特殊注释,要注明标记人和标记时间
      • TODO: (标记人,标记时间,[预计处理时间])
  • 异常
    • 事先检查值,而不是调用后处理异常
    • 异常不要用来做流程控制,效率低
    • 异常要对小段代码, 要细分
    • 异常要处理或上抛,最外层一定要处理
    • 注意事务回滚
    • finally资源要关闭,异常要处理,JDK7用 try-with-resources
    • finally中不要return,否则不执行try中return
    • 不要捕获异常的父类
    • rpc异常定义自己的result,好处一是调用方不会漏查,二是可以加异常栈
    • 不抛RuntimeException,Exception和Throwable。抛确定异常