首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Effictive Java 1 创建和销毁物件

2012-10-25 
Effictive Java一 创建和销毁物件一、 用静态工厂方法代替构造函数。???? 静态工厂方法的好处是?????? 1、 静

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

?

七、...

?

热点排行