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域的所有缺点

长度非零的数组总是可变的

最新文章

  1. C#实现JSON序列化与反序列化
  2. SDN三种模型解析
  3. HTML5中id可以用数字开头,但在css中不能正常使用
  4. UVA 11987 Almost Union-Find (并查集+删边)
  5. Python 利用pytesser模块识别图像文字
  6. android selector详解
  7. keyCode 与charCode
  8. jszs 历史管理
  9. 奋斗的孩子的TableView(三篇文章)
  10. folat i = 0.1; 警告
  11. hibetnateTemplate常用方法
  12. java当中成员变量和局部变量的区别
  13. 如何使用 VS2015 进行远程调试?
  14. Apple Watch笔记-应用内导航模式
  15. Linux驱动:内核等待队列
  16. Apache+Tomcat+mod_jk配置教程
  17. Android系统架构及启动流程
  18. 2-2 R语言基础 向量
  19. Can&#39;t create pdf file with font calibri bold 错误解决方案
  20. XPages访问关系型数据库技术与最佳实践

热门文章

  1. centos 7 firewall无法启动
  2. 转:Android Context的理解
  3. 华为上机测试题(及格分数线-java)
  4. git使用教程2-更新github上代码【转载】
  5. bootstrap只有遮罩层没有对话框的解决方法
  6. (3)oracle建用户、建表、权限、命名空间
  7. HihoCoder 1629 Graph (2017 ACM-ICPC 北京区域赛 C题,回滚莫队 + 启发式合并 + 可撤销并查集)
  8. java数组集合
  9. ACM中的正则表达式
  10. Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)