编程规约

2021-01-02  本文已影响0人  和莱
  1. 命名

  2. 不能使用英语和拼音的混合命名,纯脆的拼音也不行

  3. 类名命名遵从驼峰形式,以大写字母开头;

  4. 参数名、方法名、成员变量名、局部变量名也遵从驼峰形式,以小写字母开头;

  5. 常量名全部大写,单词之间使用下划线分开,不用考虑单词太长,尽可能表达清楚意义;

  6. 抽象类使用Abstract或者Base开头,异常类使用Exception结尾,测试类使用要测试的类开头,Test结尾;

  7. 在Java中,数组命名与C++中不同,中括号是数组的一部分,例如:

String[] workers;
int gifts[6];
  1. 杜绝完全不规范的缩写,,避免望文不知意;

  2. 如果使用了设计模式,建议在类名中体现出设计模式,有利于阅读者快速理解;

  3. 枚举类名以Enum结尾,枚举成员全部大写,单词以下划线分割,

2. 常量定义

  1. 代码中不允许出现魔法值,即未经定义的常量;

  2. long或者对应的包装类Long赋初始值时,数字结尾必须使用大写的L,小写l 误以为是1;

  3. 如果变量值仅在一个范围内变化,建议使用Enum类;

3. 格式规约

  1. 大括号使用规定,左括号前不换行,左括号后换行,右括号前换行,右括号后如果有else语句则不换行,否则换行;

  2. 左大括号和后一个字符中间无空格,右大括号和前一个字中间无空格;

  3. if/for/while/switch/else等与之后的大括号中间都有一个空格;

  4. 任何运算符左右都有一个空格;

  5. 方法参数声明和传入时,多个参数逗号需要加一个空格;

4. OOP规约

  1. 所有的覆写方法都必须加@override注解,可以准确判断是否覆写成功;

  2. Object的equals方法容易抛出空指针异常,应该使用常量或者确定有值的对象来调用equals方法;

  3. 所有的相同类型之间的包装类之间的值的比较使用equals方法,因为将-128到127之间的值赋值给一个Integer对象,会复用已有的对象,只有这个范围之外的对象才会在堆上创建,即使值相同,也不会是相同的对象;

  4. 当一个类有多个构造方法时,放在一起便于阅读;

  5. 类内方法定义顺序依次为public, protect, private, getter/setter,根据方法信息价值排序;

  6. setter方法中,参数名称与类成员名称一致,this.param = param; 不要增加其他逻辑;

  7. 循环体内的字符拼接操作压抑使用StringBuilder的appdent方法扩展;

  8. Object的clone方法默认使用浅拷贝,如果需要深拷贝需要重写;

5. 集合处理

  1. 重写equals方法必须重写hashCode方法,因为一些需求不能使用从Object类继承类来的equals方法,但是为了保证两个equals返回true得对象计算的hashCode必须相同的约定,就需要重写hshCode方法。为何重写equals方法就得重写hashCode方法

  2. 不要在foreach循环里继续元素的remove/add操作,如果需要remove元素使用Iterator;

6. 并发处理

  1. 线程资源必须通过线程池提供,避免创建和销毁线程的开销;

  2. 使用ThreadPoolExecutor创建线程池而不是Executor,后者创建线程的弊端有FixedThreadPool和SingleThreadPool的请求队列值为Integer.MAX_VALUE,可能会堆积大量请求到这OOM,CacheThreadPool和ScheduledThreadPool允许创建线程数量为Integer.MAX_VALUE,可能会创建大量线程导致OOM;

7.控制语句

  1. 在if/else/for/while/do语句中必须使用大括号,只有一条语句也需要;

  2. 不要在判断语句中执行复杂语句,将复杂逻辑判断的结果赋值给一个有意义的变量,这样可以提高可读性;

  3. 在循环体以内的语句需要多考虑性能,因为循环执行多次,每一条低效的语句对程序性能的影响叠加起来影响很大,定义变量,新建对象等;

8. 注释规范

  1. 类、成员变量和成员方法的注释如下,不能使用//作为注释

    /**
    *注释
    */
    
  2. 注释掉的代码尽可能配合说明,而不是简单注释掉,如果以后不会再用的代码,直接删除;

上一篇下一篇

猜你喜欢

热点阅读