读书笔记说明:
effective java是按照这种条目来罗列知识点的。本读书笔记不对每条知识点做详细解释(甚至某些是没解释的)。本系列读书笔记只记录一些我认为有必要记录的重点。
1. 用静态工厂方法代替构造器
优点:
- 有名称方便理解
- 对象可以复用
- 方便返回任何子类型对象
- 创建参数化类型实例时简化代码
2. 使用builder来创建很多参数的对象
这个感觉可以依靠spring来完成。看示例代码见P9
3. 采用单元素的枚举类型实现Singleton
public enum Elvis{
INSTANCE;
//build方法中返回所需对象
public void leaveTheBuilding(){...}
}
调用:
Elvis e = Elvis.INSTANCE
4. 仅作工具类使用的类,可以使用私有构造器防止被实例化
5. 避免创建不必要的对象
例如自己维护对象池、尽量使用基本类型而不是装箱基本类型
6. 消除过期对象引用
实践:
- 对象用完手动指定为null
- 缓存可以考虑使用WeakHashMap使得其没有引用时自动删除
- 添加新条目的时候清理,例如LinkedHashMap提供了removeEldestEntry来清除过期条目
- 例如注册回调,但是没有显示取消注册,这时候可以考试采用弱引用,自动在没有引用时删除。
7. 避免使用终结(finalizer)方法
合理应用情况有:
- 充当安全网,检验之前的终止方法(例如FileInputStreamConnection,FileOutputStrean的close方法和timer的cancel方法)是否被及时调用。如果发现资源未被终结可以记录日志。
- 终结本地对等体,本地对等体即指通过本地方法将对象委托给本地对象,本地对象不会被JVM回收,就依赖这个显示终结方法来回收。