美文网首页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读书笔记一

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