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

欢迎工作一到八年的Java工程师朋友们加入Java高级交流:854630135

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有直播平台和讲师直接交流噢

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

除去美色和金钱,我认为还有一个,就是读者的认可——“二哥,你的文章真的很棒,我特别喜欢。希望能多多更新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游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  2. java 取栈顶元素_《Java实战之内存模型》详解篇

    内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的高效稳定运行 不同的JV ...

  3. java 权限修饰符_java中4种访问权限修饰符

    在Java编程语言中有四种权限访问控制符,这四种访问权限的控制符能够控制类中成员的可见性. 一.public (1) 定义:public是公共的,被public所修饰的成员可以在任何类中都能被访问到. ...

  4. java的关键字和保留字_「Java」详解常见的53个关键字

    1.在Java中目前一共有53个关键字: 其中由51+2个保留字=53个关键字 [友情提示 : Java的关键字都是小写哟] 2.Java的保留字有多少个?分别是什么? 答:Java的保留字有2个,J ...

  5. java 递归改非递归_使用Java ThreadLocals的意外递归保护

    java 递归改非递归 对于那些使用第三方工具来尝试扩展它们而又不完全了解它们的人来说,这是一个小技巧. 假定以下情况: 您想扩展一个展示分层数据模型的库(假设您要扩展Apache Jackrabbi ...

  6. java中远程连接忽略证书_忽略Java中的自签名证书

    java中远程连接忽略证书 我在职业生涯中遇到过几次问题,就是我们有时希望允许自签名证书用于开发或测试目的. Google的快速搜索显示了多年来无数Java开发人员遇到的麻烦. 根据确切的证书问题,您 ...

  7. 学java要背的单词_学习JAVA必背的8类常用单词

    Java常用的词还是挺多的,初学者有空多看看,对快速入门Java编程还是有益的.本文沈阳达内IT培训为大家介绍学习JAVA必背的8类常用单词. 1.保留关键字(2个) const --常量,常数:用于 ...

  8. java数据库表不存在_如果Java生产代码中不存在并在JUnit中确认,则创建数据库表...

    Code-Apprentice 2 java sql junit jdbc 我正在用Java编写数据库程序,并且想要创建一个表(如果它还不存在).我从中了解DatabaseMetaData.getTa ...

  9. 二、Java面向对象(7)_封装思想——访问修饰符

    2018-04-30 访问修饰符 <访问权限范围越小,安全性越高> public:表示全局的,可以在当前项目中任何地方访问 如果几个相互访问的public类分布在不用的包中,则需要导入相应 ...

最新文章

  1. 如何在网站上同步查看BCH数据
  2. linux shell read 从键盘或标准输入中读取文本
  3. 常用的 css hack实例
  4. 2018.08.10 atcoder Median Sum(01背包)
  5. Effective Java之谨慎地使用本地方法(五十四)
  6. 使用postman和SAP C4C OData服务创建销售订单
  7. sql服务器如何复制数据库文件,如何将架构和一些数据从SQL Server复制到另一个实例?...
  8. 数组的合并和升序排列_leetcode 33 搜索旋转排序数组
  9. 图文详解什么是OAuth2
  10. Reversing.Kr replace题解
  11. base64编码的图片字节流存入html页面中的显示
  12. 注解(Annotation)自定义注解入门(转)
  13. String:基本实现
  14. 运行命令、文件扩展名速查、Windows运行命令大全
  15. 基于java的超市会员积分管理系统
  16. mysql ix is_关于MySQL中的共享锁(S)、排它锁(X)、意向共享锁(IS)、意向排它锁(IX)...
  17. mysql中删除两条重复的数据,只保留一条
  18. 5G/NR LTE: 物理层抽象 PHY abstraction - SLS LLS 系统级仿真和链路级仿真
  19. # responses[name] = response
  20. 语音特征:spectrogram、Fbank(fiterbank)、MFCC

热门文章

  1. mysql优化 个人笔记 (mysql锁机制 ) 非礼勿扰 -m10
  2. MFC Rect 的详解
  3. Android 自定义apk名称
  4. 为什么我的windows 10 电脑关机时,电脑灯延迟很久才熄灭?
  5. ubuntu18.04+cuda9.0+lenovo y430p(GTX850M)亲测可用
  6. 【Vue 4 笔记 】(一)
  7. Bellman——Ford算法
  8. 什么是BASE最终一致性
  9. OOP 概念的编程基础思想----我的感想
  10. andoird 设置锁屏上不显示通知