前言

人在什么面前最容易失去抵抗力?

美色,算是一个,比如说西施的贡献薄就是忍辱负重、以身报国、助越灭吴;金钱,算是另外一个,我们古人常说“钱乃身外之物,生不带来死不带去”,但我们又都知道“有钱能使鬼推磨”。

除去美色和金钱,我认为还有一个,就是读者的认可——“二哥,你的文章真的很棒,我特别喜欢。希望能多多更新Java基础知识,真的是受益良多,就好像是在读王小波的散文,但又学了编程!”——你说,收到读者这样暖暖的评语,还需要美色和金钱?“两者皆可抛”嘛。

这篇文章主要介绍一下Java的访问权限控制。

01 访问权限控制的重要性

舒淇曾说过这样一句令人感到震撼后又虎躯一震的话:“我要把我曾经脱下的衣服一件一件的穿回来!”如今,她做到了——通过自己的努力,不仅得到了观众的认可,得了很多大奖,还收获了幸福。尽管,真的是尽管,还有一些“忆往昔峥嵘岁月稠”的朋友在电脑硬盘的深处留存了一些舒淇早年的珍藏版照片。

我扯这个例子主要为了证明一句话——访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关——如果舒淇当初那些照片的权限不是那么公开化的话,那现在就可以私自烧毁了;或者换一种出道方式;然而没有如果了。

在你最初的编程生涯中,不知道你是否创作过下面这样“优秀”的代码,就像程序清单1-1那样。

程序清单1-1:

public class NiubiUtil {

public static Date getNextDay() {

long millis = 24 * 60 * 60 * 1000;

try {

Thread.sleep(millis);

} catch (InterruptedException e) {

e.printStackTrace();

}

return new Date(System.currentTimeMillis());

}

}

本来你这些代码只是自己写着玩呢,谁知道被一个叫小二哥的同事不经考量地调用了。这一调用不要紧,小二哥的代码真的活活地等了一整天——产品经理小王老师某一天心血来潮非要测试小二哥的代码,然后点了查看下一天的按钮,程序真的在那静静地等着,直到下一天真的来临。

后果是,小王老师为了安抚用户们躁动的情绪把小二哥直接拉出去祭天了;你躲在角落里瑟瑟发抖,心里默默念叨了句话——“小二哥,你走好,兄弟真的对不住了”。

一场血淋漓的惨案啊!只因为Java访问权限控制的使用不当——该private的方法,结果失误写成了public——论访问权限控制的重要性。

02 为什么需要访问权限控制

我已经在Java编程的道路上混迹了多年,自然也写过无数曾经看起来那么“优秀”的代码。随着时间的推移,再回首过往的那些代码时,总有一种“这真的出自我手?”的疑问。

这种疑问包含两层意思,一层是感慨真的写得好,就好像年老时的李白看见自己年少时写的《望庐山瀑布》:“日照香炉生紫烟,遥看瀑布挂前川;疑是银河落九天,飞流直下三千尺。”——哟,老子年轻时写得也不赖啊。

另外一层是感慨真的写得差,比如说程序清单1-1,往事不堪回首啊,只能都随风,都随风,都随风而去!

对于这些写得很差的代码,我每次看见都想再修改一次,期待她更可读、更易理解、更具可维护性;但在美好的愿景下,也存在着巨大的压力,因为有好多其他的地方引用了要修改的代码,牵一发而动全身啊。

在变与不变的过程中,我发现——访问权限控制真的太重要了。在写代码的过程中,我们需要尽量遵循这样一个原则——除了那些必须public的方法,尽量把其他方法定义为private。这样做的好处是,在重构private方法的时候不必再担惊受怕,因为它们不会被类外部访问到。

03 protected权限修饰符是用来干嘛的

我们知道,public权限修饰符使类的一切方法和属性对外可见;private权限修饰符使类的一切方法和属性只对内部可见;那么protected权限修饰符呢?

假如有一个叫王二的家伙,他有三个属性,分别是私生活、外在形象和被保护的财产,就像程序清单3-1那样。

程序清单3-1:

public class Wanger {

// 私生活

private String life;

// 外在形象

public String image;

// 被保护的财产

protected String money;

}

王二生了一个孩子叫王小二,就像程序清单3-2那样。

程序清单3-2:

public class Wangxiaoer extends Wanger{

@Override

public String toString() {

return "可以继承的财产:" + money + ";塑造的人设:" + image + ";得不到的私生活:";

}

}

王小二可以继承到王二的财产money(据说王二在王小二出生的第一个月为其存了100,以后每个月的利率为12%,现在存款是3758.17,你知道王小二现在多大了吗?),也可以模仿一点父亲的外在形象image,但却不能按照父亲的私生活方式生活。

注意到三个权限修饰符的区别了吗?

protected可以保护王二的财产顺利地继承到王小二那里,外界的人是访问不到的;public不安全,因为不仅王小二可以继承访问,外界其他人也可以访问;private太私有化,不仅外界访问不到,王小二也继承不到。

04 总结

访问权限控制的两个重要作用:第一是为了防止外界触碰到不该触碰的地方(private修饰的成员变量或者方法);第二是让类的设计者可以更改内部(private修饰的成员变量或者方法)的工作方式,而不必担心有没有对外界造成干扰。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

java权限控制是什么_Java访问权限控制的重要性深入讲解相关推荐

  1. java学习笔记 java编程思想 第6章 访问权限控制

    文章目录 6.1 包:库单元(the library unit) 6.1.1 代码组织 6.1.2 创建独一无二的包名 练习1 练习2 6.1.3 定制工具类 6.1.4 用import改变行为 练习 ...

  2. java 重写方法 访问权限_为何Java中子类重写方法的访问权限不能低于父类中权限(内含里氏替换原则)...

    为何Java中子类重写方法的访问权限不能低于父类中权限 因为 向上转型及Java程序设计维护的原因 例: 假设一个父类A 拥有的方法public void setXXX(){}可以被其他任意对象调用这 ...

  3. Java内部类、外部类之间访问权限

    Java内部类.外部类之间访问权限 啥是内部类 内部类可以访问外部类的所有成员吗 那外部类能访问内部类的所有成员吗 匿名内部类 静态内部类呢 为啥会这样呢 得出结论 啥是内部类 顾名思义,内部类就是在 ...

  4. java 接口访问权限_详解Java之路(五) 访问权限控制

    在Java中,所有事物都具有某种形式的访问权限控制. 访问权限的控制等级从最大到最小依次为:public,protected,包访问权限(无关键词)和private. public,protected ...

  5. Java实现在控制层设置用户访问权限

    服务器可能会收到各种角色用户的请求,如普通用户.游客.会员等.有些服务器接口,我们不想对所有角色开放,我们可以在接口里面设置访问权限,拒绝掉没有权限的请求.本文将介绍如何设置接口的角色访问权限,包括: ...

  6. 为何Java中子类重写方法的访问权限不能低于父类中权限

    参考:http://zhidao.baidu.com/link?url=E-c1LVmYCi3I-X1u5imdsDsdoyfeY2dJau6tU1bWnf4QAS4uthnM_8ffm6K177GE ...

  7. java的四种修饰符访问权限

    java的访问修饰符有四种:private.protected.public.default. 这四种访问修饰符的访问权限不一样. java修饰符访问权限 修饰符 所在类 同一个包内其他类 其他包内子 ...

  8. Java的访问控制修饰符_访问权限修饰符_访问权限修饰词

    public > protected > (default) > private 1.public 修饰的,在任何地方都可以访问 2.protected 修饰的,在类内部.同一个包. ...

  9. Java语法封装之继承、访问权限修饰符、重载与重写、this与super、final、Javabean的使用

    3.3封装 封装 : 隐藏内部的实现细节,对外提供公共的访问方式.方法,类,属性的私有化- 都是封装的体现 封装优点 : 提高程序的安全性 提高代码的复用性 私有是封装,但是封装不是私有 3.3.1 ...

最新文章

  1. C++实现大数的减法
  2. scrollToItemAtIndexPath使用
  3. 【数据结构与算法】之深入解析“完美矩形”的求解思路与算法示例
  4. 上海工程技术大学计算机通信与网络,上海工程技术大学
  5. Gartner:缺乏技术人才将影响企业数字化转型
  6. Head First HTML与CSS、XHTML++笔记(第四章 WEB镇之旅 第五章 认识媒体)
  7. 错误Unable to find manifest signing certificate in the certificat...
  8. 操作日志和系统日志分类记录
  9. android can为啥能发收不到数据_大数据显示:报读MBA已是未来竞争力提升的必然趋势...
  10. OneNote 安装代码高亮插件 NoteHightlight的安装及使用基础教程
  11. C语言中期报告格式,本科论文中期报告范文_本科毕业论文中期报告模板(2)
  12. Surface Pro 7 综合评测——购买感受和使用重点【品控、性能、投影】
  13. 国际区号json(含国家中英文名称、简称、区号、首拼)
  14. php laravel 开发工具,Laravel 文档工具
  15. mysql停止修复_浅析MySQL 8.0崩溃恢复
  16. matlab中load函数是什么意思,MATLAB中load函数的用法
  17. android4.4 电池管理
  18. 分布式系统实践学习总结
  19. 通过C编程实现病毒的文件感染功能…
  20. CentOS7查看CPU和内存情况

热门文章

  1. 超简单集成HMS Scan Kit扫码SDK,轻松实现扫码购
  2. ssm+jsp计算机毕业设计HSK在线学习平台系统l4e32(程序+LW+源码+远程部署)
  3. 常见搜索算法(二):二分查找
  4. java构造方法中this_Java中this关键字在构造方法中的使用
  5. 关于IDEA调试@RunWith(SpringRunner.class)报错问题
  6. 掩码、子网掩码及子网划分
  7. 小猿日记 - 程序猿的日常日记(3)
  8. React基础(伍)———【案例】todoList
  9. 基于Profibus-DP协议的PLC智能从站设计
  10. 现代版的———项链 :(  转