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)