首页 > 代码库 > EffectiveJava
EffectiveJava
第二章
1.考虑使用静态工厂来替代构造函数:
1)静态工厂可以通过命名区分要获得的实例
2)静态工厂可以选择返回的实例,可以通过控制返回的实例来重用实例
3)静态工厂可以返回该类的任何子类对象,更具灵活性
4)静态工厂在创建参数化的实例时更为简洁
缺点:
1)若只存在私有的构造函数,那么该类将无法继承
2)静态工厂与普通静态方法难以区分
2.若遇到多个参数的构造方法考虑使用构造器
1)为了满足多个参数的实例化通常采用构造方法的重载实现但当参数过多时会导致参数难以区分
2)使用JavaBeans的模式,构造无参的构造函数然后再通过set方法设置各个参数的值,缺点是多个构造被分到多个方法上去了,在高并发的情况下注意维护
3)使用Builder模式,builder模式大体是内部采用一个javabean模式方法创建对象,当对象初始化完毕时,通过该对象创建一个不可变的对象。
3.使用私有构造器和枚举类型来强化单例模式
可序列化的单例要有readResovle()方法和transient来标记实例,这样防止在序列化的时候由单例变成了多例。
4.通过私有构造器强化不可实例化的类
5.避免重复地创建实例
如一个变量经常会使用,不妨将其设为常量,避免频繁的创建销毁该变量
6.消除过期的对象引用
即防止内存泄漏,当一个对象不再使用时,及时释放这个对象的引用,否则将产生内存泄漏如:在栈上出栈某些元素后,不仅仅将当前指针下移,还要将存放的数据引用释放。
7.避免使用终结方法
1)finalize并不是用来释放资源时的处理
2)当需要终结本地资源时可使用,但注意要调用super.finalize方法
8.覆盖equals方法要满足规定
9.覆盖equals时要覆盖hashCode方法
10.始终要有toString方法
13.使类个成员的可访问性最小
封装可降低程序的耦合度
14.在公有类中使用访问方法而非公有域
公有域的直接访问可能会使得数据不合法,使用访问方法则可以很好的对数据进行限制
15.使可变性最小
43.返回0长度的数组或者集合而非null
如果返回null则要求方法的调用者对于空的情况做特殊处理,这样是不合理的。
此外如果说返回null可以减少对象的创建的消耗是不合理的。首先如果从性能上说这几乎是微不足道的,此外可使用一个零对象,每次返回此对象,共享这个对象即可。
44.
EffectiveJava