《Effective Java 3rd Edition》读书笔记(一):创建和销毁对象

Item 1:考虑使用静态工厂方法代替构造方法

优点:

  1. One advantage of static factory methods is that, unlike constructors, they have names.(静态工厂方法的一个好处是,与构造函数不同,静态工厂方法具有名字。)
  2. A second advantage of static factory methods is that, unlike constructors, they are not required to create a new object each time they’re invoked.(静态工厂方法的第二个好处是,与构造函数不同,它们每次被调用的时候,不要求非得创建一个新的对象。)
  3. A third advantage of static factory methods is that, unlike constructors, they can return an object of any subtype of their return type.(静态工厂方法的第三个好处是,与构造函数不同,它们可以返回一个原返回类型的子类型的对象。)
  4. A fourth advantage of static factories is that the class of the returned object can vary from call to call as a function of the input parameters.(静态工厂方法的第四个好处是,返回对象的类可以根据调用方法的输入参数而改变。)
  5. A fifth advantage of static factories is that the class of the returned object need not exist when the class containing the method is written.(静态工厂方法的第五个好处是,当包含方法的写被写入时,返回对象的类不需要存在。)

No.5 灵活的静态方法构成了基本的 service provider framework(例如 JDBC),包含了三个重要的组件:

  • service interface 代表了实现
  • provider registration api 注册实现
  • service access api 获取服务实例

缺点:

  1. The main limitation of providing only static factory methods is that classes without public or protected constructors cannot be subclassed. (静态工厂方法的主要缺点是,类如果不含公有的或者受保护的构造函数,就不能被子类化。)
  2. A second shortcoming of static factory methods is that they are hard for programmers to find. (静态工厂方法的第二个缺点是它们很难被开发者发现。)

常用的静态工厂方法名有:

  • from
  • of
  • valueOf
  • instance 或者 getInstance
  • create 或者 createInstance
  • getType
  • newType
  • type

Item 2:当构造方法包含多个参数,考虑使用 Builder 模式

Builder 模式适用于那些构造方法或者静态工厂方法有过多参数的类,特别是许多参数是可选的或者相同类型的。

Item 3:使用私有构造方法或枚举类型实现单例属性

Item 4:使用私有构造方法实现类不可实例化

Item 5:对于资源的强依赖,优先使用依赖注入

Item 6:避免创建不必要的对象

Item 7:消除过期的对象引用

Item 8:避免使用 finalize 方法

Item 9:对比 try-finally,优先使用 try-with-resource