EffectiveJava读书笔记一

第2章 创建和销毁对象


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

静态工厂相比构造器的优点来说如下:

  • 有名称
  • 不必每次创建一个新对象
  • 可以返回子类型
  • 创建参数化的实例使代码变得简单

缺点:

  • 类如果不含有公有的或者受保护的构造器,(即构造器为private),就不能被子类化
  • 与其他的静态方法实际上没有任何区别

2. 构造器过多,则考虑使用Builder

这里构造器的参数获取构造器过多,则需要考虑使用Builder模式来生成对象。

在使用Class.newInstance的时候,会企图调用类的无参构造函数,若没有无参构造函数,则会抛出异常。也就是说,Class.newInstance破坏了编译时的异常检查。而使用Builder则不会有这个问题。

3. 用私有构造器或者枚举来强化Singleton

  • 使用私有构造器时,需要注意唯一实例的判断,因通过反射是可以调用私有构造器的。
  • 在使Singleton类变成可序列化的时候,需生命所有实例域都是瞬时的(transient),并提供一个readResolve方法。
  • 实现只包含单一元素的枚举类型,无偿地提供了序列化机制

单元素的枚举类型已经成为实现Singleton的最佳方法

4. 通过私有构造器强化不可实例化的能力

若一个类我们不希望他被实例化,则尽量提供一个私有的构造器,并提供注释说明,在其中抛出异常也是可以的。

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

  • 若能重用一些对象,例如不可能变的对象和不会被修改的可变对象,则尽量重用,而不是新建。
  • 要优先使用基本类型而不是装箱基本类型,当心无意识的自动装箱。

6. 消除过期的对象引用

  • 好处一,当错误引用时,会抛出异常,而不是错误地执行下去。

类自己管理内存,就会出现内存泄露:

  • 缓存
  • 缓存项的生命周期地不确定性
  • 监听器和其他回调

7. 避免使用终结方法

  • Java语言规范不能保证终结方法会被及时执行和被执行。
  • 不应该依赖终结方法来更新重要的持久状态。

你可能感兴趣的:(EffectiveJava读书笔记一)