EffectiveJava读书笔记一

第2章 创建和销毁对象


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

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

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

缺点:

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

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

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

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

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

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

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

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

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

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

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

6. 消除过期的对象引用

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

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

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

7. 避免使用终结方法

  • Java语言规范不能保证终结方法会被及时执行和被执行。
  • 不应该依赖终结方法来更新重要的持久状态。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,899评论 18 399
  • 目录 第二章 创建和销毁对象 1 考虑用静态工厂方法替代构造器 对于代码来说, 清晰和简洁是最重要的. 代码应该被...
    高广超阅读 5,288评论 0 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参...
    圣骑士wind阅读 2,934评论 0 2
  • 近日,教育部发布消息:禁止中小学课本出现网址链接及二维码等。原因是因为有些网址竟然是淫秽网址。 我认为此举是因噎废...
    云上于天饮食宴乐阅读 1,761评论 0 1