读书笔记说明:
effective java是按照这种条目来罗列知识点的。本读书笔记不对每条知识点做详细解释(甚至某些是没解释的)。本系列读书笔记只记录一些我认为有必要记录的重点。

1. 用静态工厂方法代替构造器

优点:

  1. 有名称方便理解
  2. 对象可以复用
  3. 方便返回任何子类型对象
  4. 创建参数化类型实例时简化代码

2. 使用builder来创建很多参数的对象

这个感觉可以依靠spring来完成。看示例代码见P9

3. 采用单元素的枚举类型实现Singleton

public enum Elvis{
    INSTANCE;

    //build方法中返回所需对象
    public void leaveTheBuilding(){...}
}

调用:
Elvis e = Elvis.INSTANCE

4. 仅作工具类使用的类,可以使用私有构造器防止被实例化

5. 避免创建不必要的对象

例如自己维护对象池、尽量使用基本类型而不是装箱基本类型

6. 消除过期对象引用

实践:

  1. 对象用完手动指定为null
  2. 缓存可以考虑使用WeakHashMap使得其没有引用时自动删除
  3. 添加新条目的时候清理,例如LinkedHashMap提供了removeEldestEntry来清除过期条目
  4. 例如注册回调,但是没有显示取消注册,这时候可以考试采用弱引用,自动在没有引用时删除。

7. 避免使用终结(finalizer)方法

合理应用情况有:

  1. 充当安全网,检验之前的终止方法(例如FileInputStreamConnection,FileOutputStrean的close方法和timer的cancel方法)是否被及时调用。如果发现资源未被终结可以记录日志。
  2. 终结本地对等体,本地对等体即指通过本地方法将对象委托给本地对象,本地对象不会被JVM回收,就依赖这个显示终结方法来回收。