EffectiveJava(13)使类和成员的可访问性最小化
2024-08-29 14:40:29
1.为什么要使类和成员可访问性最小化
它可以有效地解除组成系统的各模块之间的耦合关系,使得这些模块可以独立的开发 测试 优化 使用 理解和修改.提高软件的可重用性
2.成员的访问级别
私有(private):只有在声明该成员的顶层类内部才可以访问这个成员
包级私有(package-private):声明该成员的包内部的任何类都可以访问这个成员(缺省访问级别)
受保护的(protected):声明该成员的类的子类可以访问该成员
公有的(public)在任何地方都可以访问该成员
3.类具有公有的静态final数组域,或者返回这种域的访问方法,这几乎总是错误的
如果类具有这种方法,客户端将能够修改数组中的内容
例如
public static final Thing[] VALUES ={...};
修正:
a.使公有数组变成私有的,并增加一个公有的不可变列表
private static final Thing[] VALUES={...};
public static final List<Thing> VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
b.使数组变成私有的,并返回一个私有数组的备份
private static final Thing[] PRIVATE_VALUES={...};
public static final Thing[] values(){
return PRIVATE_VALUES.clone();
}
盲点:
信息隐藏(封装):模块之间只通过他们的API进行通信,一个模块不需要知道其他模块的内部工作情况
尽可能地使每个类或者成员不被外界访问(如果包为包级公有,那么你就有责任永远支持他,以保持他们的兼容性)
受保护的成员应该尽量少用
不能为了测试,将类 接口或者成员编程包的导出的API的一部分
实例域绝不能是公有的
final域要么包含基本类型的值,要么包含指向不可变对象的引用.如果final域包含可变对象的引用,它便具有非final域的所有缺点
长度非零的数组总是可变的
最新文章
- C#实现JSON序列化与反序列化
- SDN三种模型解析
- HTML5中id可以用数字开头,但在css中不能正常使用
- UVA 11987 Almost Union-Find (并查集+删边)
- Python 利用pytesser模块识别图像文字
- android selector详解
- keyCode 与charCode
- jszs 历史管理
- 奋斗的孩子的TableView(三篇文章)
- folat i = 0.1; 警告
- hibetnateTemplate常用方法
- java当中成员变量和局部变量的区别
- 如何使用 VS2015 进行远程调试?
- Apple Watch笔记-应用内导航模式
- Linux驱动:内核等待队列
- Apache+Tomcat+mod_jk配置教程
- Android系统架构及启动流程
- 2-2 R语言基础 向量
- Can&#39;t create pdf file with font calibri bold 错误解决方案
- XPages访问关系型数据库技术与最佳实践
热门文章
- centos 7 firewall无法启动
- 转:Android Context的理解
- 华为上机测试题(及格分数线-java)
- git使用教程2-更新github上代码【转载】
- bootstrap只有遮罩层没有对话框的解决方法
- (3)oracle建用户、建表、权限、命名空间
- HihoCoder 1629 Graph (2017 ACM-ICPC 北京区域赛 C题,回滚莫队 + 启发式合并 + 可撤销并查集)
- java数组集合
- ACM中的正则表达式
- Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)