创建和销毁对象

第一条:考虑用静态工厂方法代替构造器

示例:

public static Boolean valueOf(boolean b) {
    return (b ? TRUE : FALSE);
}

优势:

  1. 他们有名称。
  2. 不必在每次调用他们的时候都创建一个新对象。
  3. 他们可以返回原返回类型的任何子类型的对象。
  4. 在创建参数化类型实例的时候,它们使代码变得更加简洁

缺点:

  1. 类如果不含公有的或者受保护的构造器,就不能被子类化。
  2. 它们与其他的静态方法实际上没有任何区别。
第二条:遇到多个构造器参数时要考虑用构建器
第三条:用私有构造器或者枚举类型强化Singleton属性
第四条:通过私有构造器强化不可实例化的能力
第五条:避免创建不必要的对象
    String str=new String("abc"); //don't do this;
    //abc已经是一个String的对象了,改正后为:
    String str="abc";
第六条:消除过期的对象引用
  1. Heap剖析工具:Heap Profier
  2. java.lang.ref:提供了引用对象类,与垃圾回收器之间的交互

部分代码,示例:

private Object[] elements;
private int size=0;
public Object pop(){
    if(size==0){
     throw new EmptyStackException();
    }
    Object result = elements[--size];
    elements[size]=null;
    return result;
}
第七条:避免使用终结方法

如果子类覆盖了finalize()方法,那需要记得在子类的finalize()中调用super.finalize();

但通常我们会忘记,所以有一个终结方法守卫者,已确保即使子类的终结方法未调用super.finalize()该终结方法也会被执行,如下例:

public class Parent {

    public static void main(String[] args) throws Exception{
        Parent son=new Son();
        son=null;
        System.gc();
        Thread.sleep(5000);
    }
    private final Object protectFinalize=new Object(){
        protected void finalize() throws Throwable {
            System.out.println("Parent finalize by protect");
        }
    };
    @Override
    protected void finalize() throws Throwable {
        System.out.println("Parent finalize by itself");
    }
}

public class Son extends Parent {

    @Override
    protected void finalize() throws Throwable {
        //super.finalize();
        System.out.println("Son finalize by itself");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值