第十三条 类和成员可变性最小化

        java是开源的,三大特征之一就是封装,好的封装可以让开发者感到愉悦,坏的封装就不说了。一个模块的设计好与不好,封装显得特别重要。如果一个模块的细节全都在自己模块内部处理完毕,外部需要调用这个模块,只需要传入参数即可,不必自己又去调用内部的各个函数,进行逻辑判断;简单来说,模块内部隐藏细节,处理自己的逻辑,接收外部的参数,返回外部需要的结果,不麻烦外部做出额外的操作。它把细节和逻辑完全密封到自己的内部,别的模块只需要知道调用方法即可,无需知道实现细节。这就是信息隐藏,或者叫封装。

        这么做的好处就是自己管理自己,不会与其他模块混到一起,到了后期的扩展 测试 修改 优化 等都会方便许多,也能提高速度,因为模块都是独立的,不存在依赖关系,不会产生A模块没开发完导致B模块无法开发的情况。细节隐藏,如果后期要优化,只需要改动改模块内部逻辑即可,如果一堆代码耦合到一起,改动起来牵涉其他模块,很可能造成误伤。最简单的举例 HashMap 源码,1.7之前实现是数组加链表实现的,根据hashcode值作为依准,1.8以后优化内部逻辑,如果链表内部对象超过8个,就变化为二叉表,但对外提供的put和get等方法没变,知识内部逻辑变化了,不影响调用它的地方。


访问权限级别:
public > protected > 友好的 > private

        

         public : 都能访问

         private :只能在当前类的内部引用
         protected : 跨包非子类不能访问
         友好的 :不能跨包

private 私有的,最好理解,只能在这个类里面使用,出了这个类就不行,即使是自己的子类也不行。
友好的,也是默认级别, 自己能用,子类能用,但子类和当前类要在一个包里面。
protected 自己能用,子类也能用,不管子类和基类是否在同一个包下面。
public 权限最大,谁都可以使用。

        区分这几个,是为了更好设计模块。private 一般用于类内部自己使用,一些属性判断之类,只有自己使用;protected 一般是子类,如果子类要重写某些方法或者使用某些属性,就用它;public 看着很方便,但一旦使用,并被大量引用,后期如果要修改,就要考虑好兼容性,不能出错。 private 的好处就是,一旦看见这个标识,就可以比较放心的优化,因为逻辑都是内部的,不牵涉其他,最能给人安心感;public则相反。

        对类的实例,尤其是对象属性,如果直接对外暴露接口,外面拿到它的引用,可以做出各种修改,如果不想让外部修改实例,则可以进行保护性措施,比如进行 .clone 或者 生成一个新对象,赋值后对外暴露。如果内部是个final类型,外部想用它的值并作一些修改,也可用到.clone 等方法。

    private static final Object[] VALUES = {};
    public static final  Object[] values(){
        return VALUES.clone();
    }


    private static final ArrayList<String> VALUES = new ArrayList<>();
    public static final  ArrayList<String> values(){
        return new ArrayList<>(VALUES);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值