创建和销毁对象
考虑使用静态方法代替构造器
好处主要是两方面。
灵活 ,每个静态方法都有自己的名字,这使得需要有大量类似参数的构造方法可以使用不同的名字加以区分。方法重载不足以解决需求,以及方法名可以使得不必每次都查看文档说明。
实例受控 ,例如,单例或者内存池,对象初始化之后,不是直接返回,而可以对例如数量进行控制,我认为这才是要点。
遇到多个构造其参数时考虑用Builder
一般的解决方案是重叠构造器,具体就是提供多个不同参数的构造器,构造器之间相互调用,以减少一般情况不必要参数初始化.
但是这种方案太过僵硬, 后期参数变动可拓展性太差.
应该使用builder模式, 核心如下
class A{
int a,b,c,d,e,f;//很多参数,后期会增长
内嵌类Builder{
设置a的方法(int val){a = val; 关键1,返回自己 return this;}
设置b的方法.....如上
build(){关键2,调用A的私有构造器,A(this);}
}
}
build的时候可以进行参数检查, 抛出异常.
这样, 可以实现参数动态拓展 , 而且书中指出这种方式线程安全.
私有构造器强化单例, 强化不可实例化的能力
声明私有构造器以保证外部不可实例化, 可以用来实现保证单例.
避免创建不必要的对象
意思是在应该重用对象时不要重新创建. 说了和白说差不多, 判断的标准其实主要是权衡两种方案利弊. 看消耗性能而定.
- 使用静态块避免方法调用时重复初始化某些对象.
static {
例如日历对象,如果从头到尾都只需这一个,那么就写在静态方法中
Calendar c = Calendar.getInstance();
..设置
}
- 像自动装箱这种, 比如Long 是对象, long是基本类型, 那么就要小心用基本类型而不是对象
反例, 内存池看起来很美好, 管理限制对象数量, 但是实际情况是, jvm比你做得更好, 除非是消耗特别大的地方, 少用内存池.