考虑使用静态工厂方法创建对象
public static Boolean valueOf(boolean b) {
return b?Boolean.true:Boolean.false
}
- 让开发人员可以根据名称创建对象
- 创建单例
- 可以在静态方法中返回原类型对象的任何子对象。
当一个类有好多可选参数时,如何构建
1.使用重叠构造器;重叠构造器虽然可行,当是当有很多参数的时候,客户端代码任然很难阅读
2.javaBeans模式,通过调用默认构造器,然后在调用setXX方法。这样的结果是不能创建不可变类.
3.使用builder模式
package codelife.consumer.controller;
public class Student {
private final int age;
private final String name;
private final int gender;
private Student(int age,String name,int gender) {
this.age = age;
this.name = name;
this.gender = gender;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public int getGender() {
return gender;
}
public static class Builder {
private final int aAge;
private String name;
private int gender;
public Builder(int aAge) {
this.aAge = aAge;
}
public Builder name(String name) {
this.name = name;
return this;
}
public Builder gender(int gender) {
this.gender = gender;
return this;
}
public Student build() {
Student student = new Student(aAge,name,gender);
return student;
}
}
}
通过私有构造器强化不可实例化的类
避免创建不必要的对象
java中的终结方法
如果一个异常发生在终结方法中,甚至连警告都打印不出来
显示的终止对象的,释放资源通常在try-finally中进行,即时在执行过程中抛出异常,也能释放资源
try {
}
finally {
}
终结方法的两种用途
- 可以使用终结方法充当最后的“安全网”,如果用户没有调用FileOutStream的close()方法等。
- 或是为了终结非关键的本地资源。如果调用了终结方法,那么必须调用super.finalize()
对于所有对象都通用的方法
对象的默认的equals方法默认比较的两个对象的应用是否相同,而不是比较值相同。
instanceof 可以判断对象是否为空
使用equals的注意事项
- 使用“==”先比较是否是同一个引用对象
- 使用instanceof 检查对象类型是否是需要比较的类型
- 把参数转化成正确的类型
- 对于该类中的每个关键域,检查对象中的域是否与要比较的相同。
- 当编写了一个类的equals方法时,问自己三个问题:“它是否是对称的”,“传递的”,“一致的”。
覆盖equals时总要覆盖hashcode