阿里巴巴JAVA开发手册总结

时间:2021-06-11 22:08:42

OOP规约

  1、所有的覆写方法,必须加@override注解

  2、不能使用过时的类

  3、所有的POJO类属性必须使用包装数据类型(null)

    不用设定默认值,getter/setter不要加逻辑

  4、序列化类新增属性时,请不要修改serialVersionUID

  5、声明final的情况:

    a、不需要重新赋值的变量

    b、对象参数不允许修改指向

    c、类方法不允许被重写

  6、对象的clone方法默认是浅拷贝

    浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制

    深拷贝:对象,对象内部的引用均复制

 

集合处理

  1、必须重写equals和hashCode:a、set存储的对象 b、自定义对象作为map的键

  2、array = list.toArray(new T[list.size()])

  3、不要在foreach循环里进行元素的remove和add操作,remove请用Iterator

  4、如果倒序的遍历,中间即使有删除也不会漏掉元素

  5、集合初始化时,尽量指定集合初始值大小

  6、使用entrySet遍历Map类集合KV,keySet其实是遍历了两次,一次是转为Iterator,一次是从hashMap取值??

 

并发处理

  1、创建线程(池)时,请指定有意义的线程名称

  2、线程池不允许使用Executors去创建,通过ThreadPoolExecutor

  3、使用ThreadLocal代替原来的new SimpleDateFormat

private static final ThreadLocal<SimpleDateFormat> dateFormatter = new ThreadLocal<SimpleDateFormat>(){
  @Override
  protected SimpleDateFormat initialValue() {
    return new SimpleDateFormat("yyyy-MM-dd");
  }
};

  4、能用对象锁,不要用类锁

  5、Timer运行多个TimeTask时,只要一个没捕获异常,其它任务便会自行终止,使用ScheduledExecutorService

  6、HashMap在容量不够时进行resize,由于高并发可能出现死链,导致CPU飙升

 

其它

  1、POJO类中布尔类型的变量,都不要加is

  2、枚举类构造方法被默认强制是私有

  3、POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO

  4、运算符与下文一起换行

  5、逻辑超过三层的,状态模式实现

  6、try-with-resources都是一个能够确保资源能被正确地关闭的强大方法(JDK7)

  7、不能在finally块中使用return

  8、日志使用占位符

    logger.debug("Processing trade with id:{} symbol:{}", id, symbol)