对象
1、equals、hashCode覆盖
1.1、hashCode、equals方法必须同时覆盖
1.2、覆盖equals必须满足自反性、对称性、一致性、非空性;相互equals的对象hashCode必须相同
1.3、最好使用lombok、AutoValue生成equals、hashCode方法
1.4、如果对象有放到集合比如ArrayList、HashSet的情况,最好覆盖equals、hashCode方法
2、toString必须覆盖
3、使用lombok避免样板式代码
常见的方法setXXX、getXXX、toString、hashCode以及builder模式都可以通过lombok实现
4、构造方法
4.1、构造函数的参数列表不要过长(>6)。如果需要构造多个字段的对象,可以考虑使用builder模式。
4.2、不需要构造的类,需要私有化构造函数
5、 其它
5.1、 谨慎使用clone方法
5.2、try-resources优先于try-finally
5.3、避免创建不必要的对象
5.4、比较相等使用equals,不要使用==。另外使用常量equlas变量,避免NPE
基本类型的包装类型
范型
1、不要使用原生类型
2、优先使用范型
涉及一些算法处理;自定义数据结构
3、谨慎并用泛型以及可变参数
4、了解每一种集合类型的使用场景,选取适合的集合类型。如果有并发操作,需要考虑线程安全的集合。
再次强调,需要注意包装类的影响;注意可能OOM的可能性,因为java集合没有严格限制集合的大小。
5、考虑使用Guava Collection或者Apache Collections
异常
1、不要捕捉RunTimeException、Throwable、Exception
2、尽量使用jdk自带异常
3、处理异常
3.1、异常转义
3.2、异常上下文
3.3、 对象原子性
事务一致性
3.4、spring异常处理器
方法
1、检查参数有效性
注意检查响应结果
2、必要时进行保护性拷贝
拷贝时注意合适的拷贝深度
3、谨慎设计参数签名
避免过长的参数列表、最好不用使用map作为参数、注意缩写、参数类型最好使用接口
4、慎用重载
5、返回空数组、集合、Optional,而不是null