第二章 :创建和销毁对象
- 一:使用静态工厂方法代替构造器
_ 静态工厂方法比构造器的主要优势:_ 1.静态工厂方法有名称 2:不比每次调用他们的时候创建一个新对象 3:他们可以返回类型的任何子类型的对象。4:在创建参数化类型实例的时候,他们使代码变的更加简洁。
_ 静态工厂方法比构造器的主要缺点:_ 1:类如果不含有公有的或者守保护的构造器,就不能被子类化。2:他们与其他的静态方法实际上没有任何区别
- 二: 遇到多个构造器参数时要考虑使用构建器
package net.newcapec.effective.test;
/**
* Created by lsq on 2017/3/9.
*/
public class User {
private String id;
private String name ;
private String age;
private String add;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", add='" + add + '\'' +
'}';
}
public User builderName(String name)
{ this.name = name; return this; }
public User builderAge(String age)
{ this.age = age; return this; }
public User builderAdd(String add)
{ this.add = add; return this; }
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAdd() {
return add;
}
public void setAdd(String add) {
this.add = add;
}
public static void main(String[] args) {
User u= new User().builderAdd("洛阳").builderAge("12").builderName("LSQ");
System.out.println(u.toString());
}
}
如果类的构造器或者静态工厂方法中具有多个参数,设计这种类的时候,Builder模式就是一种不错的选择。
- 三: 使用私有构造器或者枚举类型强化Singleton属性
比较严谨的单例会包含readResolve方法
public class Elvis {
public static final Elvis INSTANCE = new Elvis();
private Elvis(){};
public static Elvis getInstance(){
return INSTANCE;
}
//防止反序列化创建新的对象
private Object readResolve(){
return INSTANCE;
}
}
单元素的枚举类型已经成为实现Singlenton的最佳方法。
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() {
System.out.println("Whoa baby, I'm outta here!");
}
}
-
四: 通过私有构造器强化不可实例化的能力
-
五: 避免创建不必要的对象
-
六: 消除过期的对象引用
-
七: 避免使用终结方法
第三章 :对与所有对象都通用的方法
-
八: 覆盖equals时请遵守通用的约定
-
九: 覆盖equals总要覆盖hashCode
-
十: 始终要覆盖toString方法