庄生晓梦

庄生晓梦迷蝴蝶

博客园 首页 新随笔 联系 订阅 管理

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域的所有缺点
长度非零的数组总是可变的

posted on 2017-02-26 13:56  qwop  阅读(161)  评论(0编辑  收藏  举报