20220730_第七小组_张红睿_学习笔记_记录

Java基础第十八天

阿里巴巴java开发手册部分规约

一、命名风格

  1. 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

  2. 所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

  3. 类名使用大驼峰风格,但以下情形例外:DO/BO/DTO/VO/AO/PO/UID等。

  4. 方法名、参数名、成员变量、局部变量都同一使用小驼峰风格。

  5. 常量命名全部大写,单词间用下划线隔开,力求语义表达完成清楚,不要嫌名字长。

  6. 抽象类命名使用Abstact或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类名称开始,以Test结尾。

  7. 类型与中括号紧挨相连来表示数组。

  8. 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。

  9. 避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可读性降低。

  10. 杜绝完全不规范的缩写,避免望文不知义。

  11. 在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。

  12. 如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。

  13. 接口类中的方法和属性不要加任何修饰符号(public也不要加),保持代码的简洁性,并加上有效的Javadoc注释。尽量不要在接口里定义变量,如果一定要定义变量,确定与接口方法相关,并且是整个应用的基础常量。

  14. 接口和实现类:对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别。

  15. 如果是形容能力的接口名称,取对应的形容词为接口名(通常是-able的形容词)。

  16. 枚举类名带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。

  17. 各层命名规约:方法命名:获取单个对象的方法用get做前缀。获取多个对象的方法用list做前缀。获取统计值的方法用count做前缀,插入的方法用insert/save做前缀,删除的方法用delete/remove做前缀。修改的方法用update做前缀。

  18. 不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。

  19. 在long或者Long赋值时,数值后使用大写的L,不能是小写的l,小写容易造成混淆、误解。

  20. 不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。

  21. 常量的复用层有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。

  22. 如果变量值仅在一个固定范围内变化用enum类型来定义。

  23. 如果大括号内为空,则简洁地写成{}即可,大括号中间无需换行和空格,如果是非空代码块则:左大括号前不换行、左大括号后换行、右大括号前换行、右大括号后还有else等代码不换行;表示终止的右大括号后必须换行。

  24. 左小括号和右边相邻字符之间不出现空格;右小括号和左边相邻字符之间也不出现空格;而左大括号前需要加空格。

  25. if/for/while/switch/do等保留字与括号之间都必须加空格。

  26. 任何二目、三目运算符的左右两边都需要加一个空格。

  27. 采个用4个空格缩进,禁止使用tab字符。(除非tab键设置为4个空格)

  28. 注释的双斜线与注释内容之间有且仅有一个空格。

  29. 在进行类型强制转换时,右括号与强制转换值之间不需要任何空格隔开。

  30. 单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则:

    1)第二行相对第一行缩进4个空格,从第三行开始,不再需要继续缩进。

    2)运算符与下文一起换行。

    3)方法调用的点符号与下文一起换行。

    4)方法调用中的多个参数需要换行时,在逗号后进行。

    5)在括号前不要换行。

  31. 方法参数在定义和传入时,多个参数逗号后边必须加空格。

  32. IDE的text file encoding设置为UTF-8,IDE中文件的换行符使用Unix格式,不要使用Windows格式。

  33. 单个方法的总行数不超过80行。

  34. 没有必要增加若干空格来使变量的赋值等号与上一行对应位置的等号对齐。

  35. 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来提升可读性。

  36. 避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。

  37. 所有覆写方法,必须加@Override注解。

  38. 相同参数类型、相同业务含义,才可以使用Java的可变参数,避免使用Object。

  39. 外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated注解,并清晰地说明采用的新接口或者新服务是什么。

  40. 不能使用过时的类或方法。

  41. Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。推荐使用java.util.Objects#equals(JDK7引入的工具类)。

  42. 所有整型包装类对象之间值得比较全部使用equals方法比较。

  43. 任何货币金额,均以最小货币单位且整形类型来进行存储。

  44. 浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals来判断。

  45. 禁止使用BigDecimal(double)的方式把double值转化为BigDecimal对象。

  46. 所有POJO类属性必须使用包装数据类型。

  47. RPC方法的返回值和参数必须使用包装数据类型。

  48. 所有的局部变量使用基本数据类型。

  49. 构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在init方法中。

  50. 当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序防止在一起,便于阅读。

  51. 类内方法定义的顺序依次是:公有方法或保护方法 > 私有方法 > getter/setter方法。

  52. setter方法中,参数名称与类成员变量名名称一致,在getter/setter方法中,不要增加业务逻辑,增加排查问题的难度。

posted @ 2022-07-31 21:03  jzhr  阅读(25)  评论(0编辑  收藏  举报