9. 使用try-with-resources替代try-finally
示例:
// 传统方式
BufferedReader bro =null;
try {
bro = new BufferedReader(new FileReader("xxx"));
bro.readLine();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bro !=null){
try {
bro.close();
} catch (IOException e) {
e.printStackTrace();
}finally{
bro = null;
}
}
}
// 使用try-with-resources
try(BufferedReader br = new BufferedReader(new FileReader("xxx"))){
br.readLine();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
在处理必须关闭的资源时,使用try-with-resources语句替代try-finally语句。生成的代码更简介、更清晰。使用时必须实现AutoCloseable接口。
10-11. 重写equals
什么时候需要重写equals方法?
当一个类包含逻辑相等的概念,简言之就是判断两个类是否相等不能简单通过引用对象的地址进行时,需要重写。
重写时需遵从以下特性:
- 自反性:对于任何非空引用x,x.equals(x)必须返回true
- 对称性:对于任何非空引用x和y,如x.equals(y)返回true则y.equals(x)也必须为true
- 传递性:对于任何非空引用x、y、z,如x.equals(y)返回true,y.equals(z)返回true则x.equals(z)也必须为true
- 一致性:对于任何非空引用x、y,如果equals比较中使用的信息没有被修改,多次调用结果必须一致
- 对于任何非空引用x,x.equals(null)必须返回false
- 重写equlas方法时,必须同时重写hashcode方法
12. 始终重写toString方法
重写有助于纠错排查问题,可通过lombok插件+注解的方式实现重写toString方法
13. clone
浅克隆
如果原型对象的成言变量是值类型,将复制一份给克隆对象,如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址
深克隆
无论原型对象和成员变量时值类型还是引用类型都将复制一份给克隆对象
14. 考虑实现Comparable接口
当需要对类对象进行排序时,可实现Comparable接口,实现次接口后,可使用集合工具对类对象集合进行快速排序如Arrays.sort()等。