effect java 学习摘要(1)

来源:互联网 发布:模拟羊水声音软件 编辑:程序博客网 时间:2024/06/04 17:50

静态工厂方法替代构造器

  • 内容

    • 优点 :
      1. 返回的对象, 客户端生成对象的代码更容易被阅读. 常用构造器的参数本身没有确切地描述正被返回的对象.
      2. 不必在每次调用的时候都创建一个新的对象. 如果程序经常请求创建相同的对象 , 那这种方式极易提升性能.
      3. 返回原返回类型的任何子类型的对象.
      4. 创建参数类型实例的时候,使代码变得更加简洁.

    • 缺点 :

      1. 类如果不含共有的或者受保护的构造器, 就不能被子类化.
      2. 与其他静态方法实际没有任何区别
    • 静态工厂方法 :

      1. java中常见的静态工厂方法命名 :
        valueOf()
        of()
        newInstance()
        getType()
        newType()
        getInstance()
      2. 常见的静态工厂方法实现由Sington单例模式;

多个构造器参数时要考虑用构建器

  • 场景 : 初始化对象实例具有多个构建参数.
  • AnTipattern(反模式) : 避免JavaBean模式构建, 除非保证线程安全, 否则多线程访问会有大问题.
  • 解决方案 : 使用Builder模式来构建多参的对象

私有构造器或者枚举类型强化Singleton属性

  • 最佳单例模式的实现 : 枚举Enum单例模式
    单例模式更多了解,请直接看这篇博客;

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

  • 类的静态方法调用, 无需实例化构造器

避免创建不必要的对象

  • 可重用的变量, 可以设置为静态变量, 并且通过静态代码块来初始化, 达到避免重复创建对象的目的.

    private static final Persion PERSION;static{    //initialize PERSION    PERSION = new Persion();}

消除过期对象引用

  • 作用 : 消除内存泄漏

  • 方法 :

    1. 清空过期引用, 常用方式 object = null;
    2. 内存泄漏来源于缓存 , 建议 WeakReference包裹之;
    3. callback以及监听持有的匿名类, 建议也用WeakRefence包裹, 但还是需根据实际场景处理.

finalize()函数的使用

  • 使用try{}finally{}代码块 , 释放资源, 例如cursor,bitmap等等
  • finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
  • Java中所有类都从Object类中继承finalize()方法
原创粉丝点击