Effective Java (创建和销毁对象)http://www.cnblogs.com/stephen-liu74/archive/2012/01/13/2228354.html
一、考虑用静态工厂方法代替构造器
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
double num = 0.01
BigDecimal num1 = new BigDecimal(num); //num1=0.01000000000000000456161
BigDecimal num2 = BigDecimal.valueOf(num);// num2 = 0.01
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
double num = 0.01
BigDecimal num1 = new BigDecimal(num); //num1=0.01000000000000000456161
BigDecimal num2 = BigDecimal.valueOf(num);// num2 = 0.01
二、遇到多个构造参数时要考虑用构建器(Builder模式)
多参数用javaBean传参数 ,还是用builder 还需根据实际情况讨论
三、用私有构造器或者枚举类型强化Singleton属性
某种情况下单例和静态方法区别不大
如果要用单例,建议还是用标准的单例模式,初始化的时候带同步
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
四、通过私有构造器强化不可实例化的能力
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
只要实例就报错
public class UtilityClass {
//Suppress default constructor for noninstantiability.
private UtilityClass() {
throw new AssertionError();
}
}
五、避免创建不必要的对象
public class UtilityClass {
//Suppress default constructor for noninstantiability.
private UtilityClass() {
throw new AssertionError();
}
}
String s = new String("stringette");
String s = "stringette";
Boolean b = Boolean.valueOf("true");
Boolean b = new Boolean("true");
六、消除过期的对象引用
String s = new String("stringette");
String s = "stringette";
Boolean b = Boolean.valueOf("true");
Boolean b = new Boolean("true");
该条目只是推荐在以下3中情形下需要考虑资源手工处理问题:
1) 类是自己管理内存,如例子中的Stack类。
2) 使用对象缓存机制时,需要考虑被从缓存中换出的对象,或是长期不会被访问到的对象。
3) 事件监听器和相关回调。用户经常会在需要时显示的注册,然而却经常会忘记在不用的时候注销这些回调接口实现类。
七、避免使用终结方法
finally finalize
inputStream.close