第13条 使类和成员的可访问性最小化
模块之间只通过API进行通信,一个模块不需要知道其他模块的内部工作情况。这个概念就是封装。
第一规则:尽可能使每个类或者成员不被外界访问
实例域不能是公有的。
使用公有的静态final数组域,是安全漏洞的一个常见根源
第14条 在公有类中使用访问方法而非公有域
如果类是包内访问或者私有嵌套类,直接暴露它的数据域并没有本质的错误
让公有类直接暴露域虽然从来都不是好办法,但是如果域是不可变的,这种做法的危害就比较小一些。
总之,公有类永远都不应该暴露可变的域。
第15条 使可变性最小
不可变类是指其实例不能被修改的类,每个实例中包含的所有信息都必须在创建该实例的时候就提供,并在对象的整个生命周期内固定不变。
为了使类不可变:
1. 不要提供任何会修改对象状态的方法
2. 保证类不会被扩展
3. 使所有域都是final的
4. 使所有域都是私有的
5. 确保对于任何可变组件的互斥访问。如果类具有可变对象的域,则必须保证客户端不会得到该对象的引用。并且不要用客户端提供的对象的引用来初始化这样的域。
不可变对象比较简单,