java私有属性和私有方法_Java 9中什么是私有的?

java私有属性和私有方法

在进行面试时,我发现大多数应聘者都不知道Java中的private修饰符真正意味着什么。 他们对此有所了解,足以应付日常编码,但还远远不够。 这不成问题。 足够了解就足够了。 但是,了解Java的一些内部工作仍然很有趣。 在极少数情况下,它可能会揭示某些细节。 如果没有别的,那就很有趣.orElse(whyDoYouReadIt)吗?

顺便说一句:在我看来,即使与我个人有关的陈述和含义是虚假的,提及面谈也是一个写骂的好机会。 毕竟,我的人并不重要,并且远离批评我的事实,我发现这篇文章很有趣,有关访谈的结论很重要,实际上完全符合我的观点。

本文希望以比阅读语言标准更具可读性的方式描述一些Java事实。

那么什么是私人的?

private是Java中的访问修饰符。 如果您有一个类的private成员(方法,字段,内部或嵌套类或嵌套接口),则只能由同一类中的代码使用。 有趣的问题是:当private方法包含多个类时会发生什么? 怎么可能不止一个班? 如果有一个包含另一个类的类,并且在内部/嵌套类内部有一个private方法,则它在内部/嵌套类内部以及顶级类中。

封闭类内部的私有方法可以从外部类调用吗? 封闭类中的代码可以在外部类中调用私有方法吗? 在两种情况下答案都是肯定的。 样例代码

package javax0.package1;class TopLevelClass {void topMethod(){NestedClass nc = new NestedClass();nc.method();}private int z;interface NestedInterface {default void method(){TopLevelClass tlc = new TopLevelClass();tlc.z++;}}static class NestedClass {private int k;private void method() {TopLevelClass tlc = new TopLevelClass();k = tlc.z;}}
}

清楚地显示了这种情况:嵌套类NestedClass和嵌套接口NestedInterface都包含可以访问包含private字段z的外部类的代码。 同样,顶级类代码可以在嵌套类内部调用私有方法。 在这种情况下,此示例代码实际上并未执行任何合理的操作并不重要。

如果我们编译此单个源文件,则会得到三个类文件:

  1. TopLevelClass$NestedClass.class
  2. TopLevelClass$NestedInterface.class
  3. TopLevelClass.class

那是因为JVM不知道什么是顶层和嵌套的。 JVM对嵌套类和顶级类一无所知。 对于JVM,类只是一个类。 如果您坚持的话,这是一门顶级课程。 这主要是因为Java语言1.0没有嵌套类和内部类,并且JVM是根据该语言设计的。 在Java 1.1中引入内部和嵌套类时,仅修改了编译而不是JVM,因此内部和嵌套类仍然是语言功能,但不能直接由JVM处理。

顶级类如何访问嵌套在源代码中的另一个类中的私有方法,但是在编译时,它只是另一个“顶级”类。 它们处于同一级别。 如果将可访问性更改为公共,那么我们也可以从其他类中访问它,但我们不能。 编译器将不允许其他类中的任何其他代码访问私有方法,即使我们做了一些技巧来克服编译器,生成的类填充也将使JVM引发异常。 Java中的私有是私有的。

真正发生的是,编译器生成了特殊的getter和setter方法来访问字段z

将为从同一顶级类内部的不同类访问的每个私有字段或方法创建一个桥接方法。 如果未从封闭类访问私有对象,则不会生成该方法。 如果仅读取该字段,则仅生成getter;如果仅从外部进行设置,则仅生成setter。

这也是一个有趣的失败,因为认为只能从同一对象内部访问私有字段(或其他任何内容)。 这是我们在编程时使用这些成员的通常方式,但是如果代码具有对相同类型另一个实例的引用,则通过该引用,我们可以访问另一个对象的私有字段,就像访问“我们的对象”一样好。自己的”字段。 这是罕见的情况吗? 您可能会想,因为您很少对其进行编程。 但是实际上它非常频繁:IDE通常为我们生成代码,这就是为什么某些开发人员不考虑这一点的原因。 没有这个,几乎不可能对类的equals(Object other)方法进行编码。

Java 9呢?

到目前为止,本文中没有关于Java 9的特定内容,而如今,每一篇Java文章都应该涉及Java 9(或已经是10)。

如果我们一般地看一下访问控制,那么我们就不得不谈论JPMS,并且有很多很棒的文章。 codeFx上有很好的文章列表。 Stephen Colebourne的文章不错。

很快,您甚至可以从不同的出版商那里购买有关Java模块系统的书籍。 我很幸运,我已经可以阅读Packt的草稿,成为审稿人,我很喜欢。 但是,JPMS不会在此级别上更改“私有”。 仍然会有嵌套类,内部类和桥接方法,它们与以前完全相同。

几乎没有什么不同,Java 9现在在接口内部具有私有方法。 这意味着现在我们应该准备在内部和嵌套类中以及在接口中都具有合成桥方法。

起飞...

有时最简单的事情并不像看起来那样简单。 毕竟,整个IT技术,科学,工程都不过是一堆零和一。 只是我们有很多。 真的很多 如果本文对您来说是新的内容,那么它应该告诉您Java语言和JVM中的某些领域您可能有兴趣研究更多。 例如:

  • 嵌套类和内部类之间有什么区别?
  • 您可以在类内部具有嵌套接口,并且可以在类内部具有内部接口吗?
  • 接口中的类或接口呢? 接口中可以有内部类吗? 嵌套类怎么样?
  • 您是否可以使用反射来编写列出类所有方法的代码? 会列出合成方法吗? 它会具有哪些修饰符?
  • 当您编译内部类时,它将具有已编译名称Outer$Inner.class ,这是一个合法名称。 但是,如果有Outer$Inner.java源文件,会发生什么? 想办法!
  • 生成的合成方法也具有合法名称。 如果使用该名称定义方法会怎样? 您看到的是Java规范还是特定于实现的?
  • 您可以嵌套内部和嵌套的类和/或接口有多深? 嵌套类可以包含内部类吗? 内部类可以包含嵌套类吗?
  • 您的猜测是什么,为什么JDK中没有合成修饰符的符号名称? 为什么修改器的实际值与volatile字段的值相同?
  • 嵌套类中可以有一个静态字段,类或方法吗?

我知道,这些问题和知识的答案不切实际。 我从未见过任何代码或项目,这些代码或项目知道内部类不能具有静态字段会带来任何好处。 另一方面,考虑这些问题,获得答案可能会给您带来一些乐趣,例如解决填字游戏(如果您喜欢的话)以及仍然有用的知识,以我们无法识别的方式帮助理解技术。 在某些情况下,一个人发现错误的速度比其他人快,因为她“感觉”到该技术。 那是当您无法分辨是什么在耳边窃听了解决方案时,却知道了类似上面的内容。 但是,只有当您喜欢深入研究该技术的那些细微之处时,才会如此。

最后一个技巧性的问题,如果您愿意,甚至比上面的娱乐问题还不那么实用:

难题

我们知道在内部(非嵌套)类中不可能有静态字段。 仍然有可能由Java编译器从具有静态方法的内部类生成编译的类文件吗?

翻译自: https://www.javacodegeeks.com/2017/08/private-java-9.html

java私有属性和私有方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stata F值缺失_stata面板数据回归操作之GMM

新手面板数据回归之GMM 的 stata 操作步骤广义矩估计( Generalized Method of Moments 即 GMM ) 原理就是回归!就是一种高级点的回归!我也是新手,也有很多不太懂的地方。断断续续学习了两个月,看了很多文献…

后缀为frm是什么文件_Shell 点文件可以为你做点什么

了解如何使用配置文件来改善你的工作环境。-- H.waldo Grunenwald(作者)不要问你可以为你的 shell 点文件(dotfile)做什么,而是要问一个 shell 点文件可以为你做什么!我一直在操作系统领域里面打转,但是在过去的几年中,我的日常使…

计算机usb端口没反应,技术编辑教您电脑usb接口没反应怎么办

近来,有好多小伙伴反应有电脑USB接口不能使用的情况,鼠标键盘通通没反应。针对电脑usb接口没反应的问题,小编整理了常见的原因以及解决方法,希望能帮助你们解决问题USB是一个外部总线标准,用于规范电脑与外部设备的连接…

计算机二级access模考软件_计算机二级考前通关大礼包来啦!各科目模考软件、视频教程,更有往年真题、最新考纲等打包送!...

掐指一算,全国计算机二级就要开考了不知道大家准备的怎么样了?没准备?这个时候就该我出场了看看为大家精心准备的计算机二级考试的干货资源吧让你的考试一次pass!本期资料包括计算机二级考试最新大纲计算机二级模考软件计算机二级…

foxpro 打印 字体_【部编版同步复习】16年级上册期中预测卷,可打印!

小语说:开学以后,不仅要认真学习,还要注意复习之前的知识点。小语给你们准备了小学语文部编版1-6年级每课一练,快来学习收藏。(点击下方蓝色字体查看完整版,可打印下载哦!)点击蓝字标题 可查看相关内容电子…

raii_Java中的RAII

raii资源获取即初始化( RAII )是Bjarne Stroustrup用C 引入的一种设计思想,用于异常安全的资源管理。 由于垃圾回收,Java 没有此功能,但是我们可以使用try-with-resources实现类似的功能。 约翰哈德斯(Joh…

计算机应用基础本模块一测试,广东开放大学远程教育专科2018年秋计算机应用基础Word模块测试...

广东开放大学远程教育专科2018年秋计算机应用基础Word模块测试 (12页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.90 积分广东开放大学远程教育专科2018年秋计算机应用基础Word模块测试1. 撤销输…

蓝牙驱动卸载后自动安装_最热建筑安装工程计算表格,输入后自动生成,省时方便易上手...

最热建筑安装工程计算表格,输入后自动生成,省时方便易上手!工程量计算是每一个造价从业者必备技能。但是要保证计算过程中不能有一丝丝差错,实在是一件令人头疼的事情,因为步骤比较繁杂,并且算量大&#xf…

51单片机做web服务器网页,基于51单片机的嵌入式web服务器

单片机 系统设计 编程维普资讯 http://doc.xuehai.net基于 5单片机的嵌入式 w b服务器 1 e基于 5单片机的嵌入式 we服务器 1 b刘东 (南交通大学电气工程学院 )西摘要本文设计实现了一个基于 5单片机的嵌入式 WE l B服务T P I议实现的嵌入式 WE C/P协 B服务器可以使各种家电设备…

stm32f4 hs 电路_电动机控制电路识图一看就懂

点击上方电工电气学习,关注并星标专业的电工电气领域自媒体,不容错过欢迎转发朋友圈,欢迎文末留言本书采用原理图与实物接线图一一对照的形式,讲述了常用机械设备、液位控制的水泵、小型机械设备、供排循环水泵等的电动机控制电路…

isnull mysql_mysql isnull用法讲解

mysql isnull用法讲解 MySQL 可以使用 ISNULL() 函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。 我们先来看几个is null sql用法: select * from newtable where name is null //取得newtable表中name为null值的所有数据 select * from tbas_tablemysql isnull用法讲…

迈克尔 杰克逊mv_杰克逊JSON解析错误– UnrecognizedPropertyException:无法识别的字段,未标记为可忽略[已解决]...

迈克尔 杰克逊mv在解析从我们的一个RESTful Web服务接收到的JSON字符串时,我收到此错误“线程“ main”中的异常com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“ person”(类Hello $ Person)…

手机版wps怎么制作折线图_手机怎么制作电子签名?有没有手机电子签名软件或者APP?...

手机怎么制作电子签名?有没有手机电子签名软件或者APP?手机制作电子签名非常简单,当然也有移动版的电子签名软件或者APP。根据《电子签名法》第13条规定:电子签名同时符合下列条件的,视为可靠的电子签名:(一…

mysql查看主键别名_MySQL怎么查看约束的别名呢?

old神谕两种常用方法:① show index,其中key_name就是约束名SHOW INDEX IN table_name;(rootlocalhost) [test]> show index in a\G*************************** 1. row ***************************Table: aNon_unique: 1Key_name: idx_idSeq_in_ind…

api网关和esb区别_具有ESB,API管理和Now .. Service Mesh的应用程序网络功能。

api网关和esb区别我最近谈论了微服务模式的演变,以及来自Lyft的Envoy之类的服务代理如何帮助将弹性,服务发现,路由,指标收集等责任推到应用程序下一层。 否则,我们冒着希望并祈祷各种应用程序将正确实现这些关键功能或…

是否可以改变 宏的值_给女人的建议:当父母不同意你的男朋友,可以尝试六个方法...

女生在面对感情婚姻的时候都应该深思熟虑,很多时候考虑问题应该全面一点,在现实生活中,一部分女生在和男朋友谈恋爱的时候,却没有得到父母的同意,甚至父母非常反对,在这个时候女生应该尝试六个方法&#xf…

mysql 存储过程求和_MySQL - 存储过程和函数

MySQL - 存储过程和函数创建和调用存储过程-- 创建stu_group()存储过程,封装 分组查询总成绩,并按照总成绩升序排序的功能-- 注意: DELIMITER 必须写在一行的最前面, 前面不能有空格####DELIMITER $CREATE PROCEDURE stu_group()BEGINSELECT gender,SUM(…

php云服务器买什么系统吗,php云服务器买什么系统

php云服务器买什么系统 内容精选换一换新购买的云硬盘怎么使用云硬盘是网盘吗云硬盘可以单独使用吗云硬盘购买后不使用会收费吗如何停止云硬盘收费如何查看云硬盘详细信息云硬盘的可用区可以变更吗云硬盘是否支持共享盘转非共享盘,普通IO转超高IO云硬盘已退订、误删…

apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...

apache.camel从历史上看, Apache ActiveMQ消息代理最初是在大型消息以MB为单位而不是GB的情况下创建的,就像您今天所做的那样。 下一代代理Apache ActiveMQ Artemis(或仅是Artemis)则不是这种情况,后者对大型消息的支…

double小数点后最多几位_用了这么多英语学习APP后,我还是最喜欢这4款

适合系统:安卓、iOS(后台回复「236」获取)学霸君曾经在知乎看到过一个问题:英语近几年会被淘汰吗?现在学英语还有什么用?底下点赞数最多的一个评论:不是英语即将淘汰,而是英语水平差到还需要艰难学英语的人…