美文网首页java基础与进阶
EffectiveJava读书笔记一

EffectiveJava读书笔记一

作者: alighters | 来源:发表于2016-01-08 19:43 被阅读134次

第2章 创建和销毁对象


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

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

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

缺点:

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

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

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

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

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

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

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

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

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

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

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

6. 消除过期的对象引用

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

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

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

7. 避免使用终结方法

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

相关文章

  • EffectiveJava读书笔记一

    第2章 创建和销毁对象 1. 考虑用静态工厂方法代替构造器 静态工厂相比构造器的优点来说如下: 有名称 不必每次创...

  • EffectiveJava读书笔记二

    第3章 对于所有对象都通用的方法 覆盖equals时请遵守通用约定 在覆盖equals会出现意料不到的错误,在以下...

  • EffectiveJava读书笔记三

    第4章 类和接口 使类和成员的可访问性最小化 模块之间只通过它们的API进行通信, 一个模块不需要知道其他模块的工...

  • EffectiveJava笔记[一]

    1、考虑使用静态工厂方法代替构造方法: 静态工厂方法的优点: 拥有名字,更加容易阅读 不需要每一次调用的时候都创建...

  • 单例模式

    单例模式 最近在看《剑指offer》,根据《剑指offer》的讲解,结合《effectiveJava》简单学习了一...

  • EffectiveJava 学习记录 一

    第一章 前言 学习摘要 第二章 创建和销毁对象 学习主题 学习摘要 2017/7/4 23:15:43

  • EffectiveJava笔记[四]

    【序】今天睡懒觉了,差点咕咕咕。(手动换行) 昨天试图分享自己的笔记,结果被吐槽只是抄书。这句话的对做为尝试写总结...

  • EffectiveJava笔记[三]

    11、重写equals时重写hashCode方法 在每一个重写了equals方法的类中,应当重写这个类的hashC...

  • EffectiveJava笔记[二]

    6、避免创建不必要的对象 此条目下作者有这个观点:当你应该重用现有对象的时候,请不要创建新的对象 最突出的就是字符...

  • 覆盖equals时请遵守通用约定

    上次在公众号发布了一篇EffectiveJava的笔记创建和销毁对象,有人反应字数太多了,一下子看不过来,于是我考...

网友评论

    本文标题:EffectiveJava读书笔记一

    本文链接:https://www.haomeiwen.com/subject/ngafkttx.html