读 effective java 中文版第二版读后感(第二天)
2019-09-27 本文已影响0人
隔壁小新
第三条 用私有构造器或者枚举类型强化Singleton属性
singleton指仅仅只被实例化一次的类
1.第一种实现方法 通过私有构造器的方法实现:
public class Elvi{
public static final Elvi INSTATANCE=new Elvi();
private Elvi(){}
public void leave(){}
}
弊端:
用户可以使用反射机制在生成一个新的对象,如果需要解决此问题需要修改构造方法,当创建第二个对象的时候抛出异常。
2.第二中实现方式,使用静态工厂方法实现:
public class Elvi{
private static final Elvi INSTANCE=new Elvi();
private Elvi(){}
public static Elvi getInstance(){
return INSTANCE;
}
public void leave(){}
}
3.在java1.5后 实现Singleton还有第三种方法,只需要编写一个包含单个元素的枚举类型:
public enum Elvi{
INSTANCE;
public void leave(){}
}
心得体会:
读完此条后获得了三种不一样的实现单例模式的方法,总结下来三种方法最被推崇的是第三种使用单元素的枚举类型实现Singleton为最佳的方案。
第四条 通过私有构造器强化不可实例化的能力
对于只包含静态方法和静态域的类,使其不能实例化
1.为此种类添加一个私有的构造方法,并且添加抛出异常,避免使用反射创建此种类
public class Elvi{
//Support default constructor for noninstantiability
private Elvi(){
throw new Assertionerror();
}
}
心得体会:
直接使用此方法去处理工具类即可
第五条 避免创建不必要的对象
一般情况最好能重用对象而不是在每次需要的时候就创建一个相同功能的新对象
1.避免使用
String s= new String("stringette");
而是使用
String s="stringetter"
2.使用静态工厂方法Boolean.valueOf(String)去获取对象,避免创建不必要的对象
3.使用一个静态的初始化器提取出来功能的部分
public class student{
private final Date birthDate;
static{
birthDate=new Date();
}
public boolean isBadyBoomer(){
system.out.println(birthDate)
}
}
心得体会:
通过本条学习后在创建对象的时候首先想到的应该是获取已经创建的对象信息,而不是首先去new一个新的对象