使类和成员的可访问性更小 (13)

一、好的设计模块与坏的设计模块java

  • 是否隐藏内部数据和其余实现细节
  • API与实现,清晰隔离开
  • 模块之间经过API通讯
  • 信息隐藏或封装是软件设计的基本原则之一

二、信息隐藏很是重要数组

  • 能够有效地解除系统各个模块之间的耦合关系
  • 使得各个模块独立开发、测试、优化、使用、理解、修改
  • 加快系统开发速度
  • 减小维护负担

三、信息隐藏自己不会带来好的性能,可是能够有效调节安全

  • 一旦系统完成,能够分模块性能测试,肯定影响性能模块,单独优化

四、信息隐藏提升了软件的可重用性性能

  • 下降了构建大型系统风险
  • 即便整个系统不可用,有些独立模块也是可用的

五、java 提供了许多机制来协助隐藏信息测试

  • 访问控制,决定了类、接口和成员的可访问性
  • 实体的可访问性由其声明所在的位置,以及实体声明中所出现的访问修饰符共同决定
  • 正确使用这些修饰符对信息隐藏很是关键

六、第一规则:尽量使每一个类或成员不被外界访问优化

  • 应该写与你所编写内容一致,尽量小的访问权限

七、对于顶层的类(非嵌套类)和接口,只有两种可能的访问级别线程

  • 包级私有:非public 修饰,成为实现的一部分,内部修改优化,外界不感知
  • 公有:public 修饰,API一部分,有责任一直维护,以保持兼容

八、一个顶层包级私有类,若是仅仅在一个类的内部被使用到设计

  • 考虑让其成为内部嵌套类

九、下降没必要要公有类的可访问性,比下降包级私有顶层类更重要的多对象

  • 由于公有类是API的一部分

十、对于成员(域、嵌套类、嵌套接口、方法),有四中访问级别接口

  • 私有、包级私有是实现的一部分,不该该影响导出的API

(1)私有的(private):只有在声明该成员的顶层类内部才可访问

(2)包级私有(缺省修饰符):声明该成员的包内部的任何类均可以访问

(3)受保护的(protected):声明该成员类的子类能够访问,包内部也均可以访问

(4)公有的(public):任何地方均可以访问

十一、公有类的成员,从私有变成保护级别,会大大加强可访问性

  • 保护成员是其导出API一部分,必须一直支持
  • 受保护成员也成了该类对某个实现细节的公开承诺,
  • 受保护成员尽可能少用

十二、若是一个方法覆盖了父类的一个方法,子类的访问级别就不能低于超类的访问级别

  • 违反该规则,编译器会报错
  • 若是一个类实现了一个接口,那么全部接口方法,类都要声明为公有的
  • 接口种方法都隐含着公有访问级别

1三、实例域毫不能是公有的

  • 包含公有可变域的类并非线程安全的
  • 即便域是final 的,而且引用不可变对象
  • 当这个域变成公有的时候,就放弃了“切换到内部数据表示法”的灵活性
  • 一样的状况,适用于静态域
  • 例外:常量构成类提供的整个抽象的一部分,可使用静态final 域暴漏他们
  • 上述例外:大写字母,下划线分割,要么引用基本类型值,要么不可变类对象
  • 若是引用可变对象,即使final 修饰,其余地方能够修改、灾难后果

1四、长度非零的数组是可变的

  • 类具备的公有final 数组域、返回这种域的访问方法,几乎都是错的
  • 若是类具备这样的域或访问方法,客户端能够访问修改数组中的内容(常见安全漏洞)

  • 解决上述漏洞:

  • 备份解决:

两种解决方案,要考虑客户端如何使用结果、怎么方便、性能高来进行选择

相关文章
相关标签/搜索