工作生活

阿里巴巴Java开发手册学习记录

2019-07-08  本文已影响0人  我要扭开奥利奥

Java开发手册学习

一、命名规则

Service/DAO层方法命名规约

领域模型命名规约

二、常量定义

  1. 不允许在代码中直接定义常量
  2. 在给long或者Long类型变量赋值的时候,要在数值之后加大写的L
  3. 不要使用一个常量类要维护所有的常量,要按照常量的功能进行归类

三、代码格式

  1. 大括号的使用方法:
  1. 左小括号和字符之间不出现空格,右小括号和字符之间不出现空格
  2. if / for / while / switch / do 等保留字与括号之间必须加空格
  3. 任何二目、三目运算符的左右两边都必须加空格
  4. 双斜线的注释和注释内容之间必须有且仅有一个空格
  5. 单行超过120行需要换行,第二行比第一行缩进4个字符,后面不再缩进,运算符/方法调用的点与下文一起换行,方法调用多个参数的时候在逗号之后换行
  6. 一个方法多个参数的时候需要在参数的逗号后面添加空格
  7. 单个方法的总行数不超过80行

四、OOP规约

  1. 访问一个类的静态变量或者方法直接使用类名访问
  2. 所有的覆写方法均使用@Override注解,便于判断覆写是否成功
  3. 接口过时使用@Deprecated注解,同时说明新接口或者新服务是什么
  4. 不能使用过时的类或者方法
  5. Object的equal()方法可能存在空指针问题,因此一般使用"abc".equals(object)来进行比较。
  6. 所有包装类型全部使用equals()方法进行比较,Integer对象在-128-127的时候使用==能够得到正确结果,但是在这之外的数字使用==将无法得到正确结果
  7. POJO类必须写toString()方法,如果是继承另一个类,那么就在前面加一个super.toString()
  8. split()的结果需要对最后一个进行检查,否则可能会有越界风险
  9. 一个类如果有多个构造方法/同名方法需要放在一起,类里面的方法的定义顺序是公有方法/保护方法>私有方法>getter/setter方法
  10. setter方法中不添加额外逻辑,只进行赋值
  11. 字符串连接使用StringBuilder对象,加快速度
  12. Object的clone方法是浅拷贝,慎用
  13. 类成员之间访问要很严格,方便解耦:

五、集合处理

  1. 如果要重写equals方法那么必须重写hashCode方法,使用Set保存的对象必须重写hashCode和equals方法,Map的key必须要重写这两个方法(hashCode相等不一定equals返回true,就像HashMap中使用hashCode方法来找到同一个地方,然后使用equals方法来找到相同的元素)
  2. 集合转数组必须要使用集合的toArray()方法,传入的是类型完全一样的数组,大小为list.size()
  3. 使用Arrays.asList()把数组转为集合的时候不能使用集合相关的方法,asList()方法返回的是Arrays的一个内部类,后部数据仍然为数组,如果修改数组中的值,那么list中的值也会发生变化
  4. 不要在for each循环中尽心该元素的add()/remove()操作,使用迭代器Iterator方式进行操作,如果是并发操作的时候那么需要对Iterator对象加锁。
  5. 集合初始化的时候指定初始值大小,避免resize消耗大量时间
  6. 集合遍历尽量使用entrySet进行Map遍历,提高效率

六、 并发处理

//todo

七、控制语句

  1. switch语句要使用break/return停止,每一个switch中必须包含default语句
  2. if / else / for / while / do 语句中必须使用大括号,即使只有一行代码
  3. 在高并发场景中避免使用等于做为推出条件,应该使用大于或者小于进行判断(如果一个秒杀场景中使用商品数==0做为判断条件,在高并发场景下有可能会出现商品数由于并发变成负数而无法停止的情况
  4. 在表达异常的分支的时候,少用if-else。如果if-else的层数较深,那么直接使用卫语句的方式
  5. 循环体中的语句要考虑性能,要尽量把定义对象、变量、获取数据库连接等操作放到循环体外面,考虑能够将try-catch放到循环体之外
  6. 避免使用取反运算符
  7. 调用频次低的方法、执行时间长的方法、需要极高稳定性的方法、对外的接口、敏感权限的入口需要进行参数校验

八、 注释规约

  1. 类、类属性、类方法使用javadoc规范进行注释
  2. 所有抽象方法要使用javadoc注释,所有的类必须要添加创建者和创建日期
  3. 所有枚举类型字段都要有注释

九、其他

  1. 正则表达式的时候使用预编译功能
  2. Math.random()方法将会返回一个double类型,尽量使用Random的nextInt和next Long方法
  3. 获取时间尽量使用System.currentTimeMillis()或者System.nanoTime()方法,在jdk8中推荐使用Instant类
  4. 不要在视图模版中添加复杂逻辑操作
  5. 数据结构的初始化应该指定大小
上一篇下一篇

猜你喜欢

热点阅读