effect java 学习摘要(1) - 创建和销毁对象

静态工厂方法替代构造器

  • 内容

    • 优点 :
      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()方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值