Effictive Java 一 创建和销毁物件

一、 用静态工厂方法代替构造函数。

     静态工厂方法的好处是
       1、 静态工厂方法有名字,你可以很容易的决定选择哪个方法,而不是像用构造函数一样需要根据参数列表来选择
       2、 静态工厂方法不一定需要创建对象,可以使用预先缓存的对象,
       3、 静态工厂方法可以返回指定返回类型的任意的子类型,可以在未来修改实现而不需要修改方法签名
       4、 减少创建泛型实例的复杂度
     静态工厂方法的缺点是
       1、 如果你不提供public或者protected的构造函数,这个类就不能被继承
       2、 不易跟其他的静态方法区分开来,当然可以通过valueOf, getInstance这类的命名来使静态工厂方法显眼一些。

 

二、使用 private 的构造函数来实现单例

      注意如果该单例类实现了序列化,那么还需要覆盖 readResolve() 方法

 

public Object readResolve() throws ObjectStreamException {
   return INSTANCE;
}
 

 

三、使用 private 的构造函数来实现对象的不可以实例化,例如常量类是不需要 可实例化的。

 

四、避免创建重复物件

       反例: String s = new String("silay");如果反复执行,那么每次都是创建内容相同的新实例。

       而 String s = "silay"; 只使用单一实例。

       如果一个方法被频繁调用,方法中的 new 新实例,如果可以尽量放在方法体外只声明一次或声明为static

 

五、清除过期的对象。例:

 

public Object pop(){
   if (size==0) 
           throw new Exception();
   Object result = elements[--size];
   elements[size] == null; //注意,如果没有这句话,被引用对象不会被回收除
                                        //非本类也不被引用
   return result;
}

    此类问题在 自己实现的cache 或 pool时应特别注意

 

六、避免使用 finalizers因为他的执行是不确定的。他的优先级并不高。

      另:异常发生在 finalization 期间将不会被抛出。

      正常应该用 try catch finally 明确的终结一个资源

 

七、...

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值