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 明确的终结一个资源

七、...

猜你喜欢

转载自chxiaowu.iteye.com/blog/1409617