Effective java是美国Joshua Bloch所著,书中共十章57个条目,每个条目给出了一条用于改进程序性能和设计方案的规则。
第十二条:使类和成员的可访问能力最小
应该尽可能地使每一个类或成员不被外界访问。
私有成员和包级私有成员都是一个类的实现中的一部分,并不会影响到其导出的API。然而如果这些域所在的类实现了serializable接口,那么这些域可能会被“泄漏(leak)”到导出的API中。
具有公有的静态final数组域几乎总是错误的。
第十三条:支持非可变性
为了使一个类成为非可变类,要遵循下面五条规则:
1、不要提供任何会修改对像的方法。
2、保证没有可被子类改写的方法。
3、使所有的域都是final的。
4、使所有的域都成为私有的。
5、保证对于任何可变组件的互斥访问。
非可变对象本质上是线程安全的,它们不要求同步。非可变对象可以被自由地共享。你不仅可以共享非可变对象,甚至也可以共享它们的内部信息。非可变对象为其他对象--无论是可变的还是不可变的--提供了大量的构件。
非可变类真正唯一的缺点是,对于每一个不同的值都要求一个单独的对象。
如果一个类不能被做成非可变类,那么你仍然应该尽可能地限制它的可变性。
构造函数应该创建完全初始话的对象,所有的约束关系应该在这时候建立起来。