Java JDK11基于嵌套的访问控制的实现
Java(和其他语言)通过内部类支持嵌套类。要使其正常工作,需要编译器执行一些技巧。这是一个例子:
public class Outer { private int outerInt; class Inner { public void printOuterInt() { System.out.println("Outer int = " + outerInt); } } }
在执行编译之前,编译器会修改它以创建类似的东西:
public class Outer { private int outerInt; public int access$000() { return outerInt; } } class Inner$Outer { Outer outer; public void printOuterInt() { System.out.println("Outer int = " + outer.access$000()); } }
虽然从逻辑上讲,内部类是与外部类相同的代码实体的一部分,但它被编译为一个单独的类。因此,它需要编译器创建合成桥接方法,以提供对外部类的私有字段的访问。
这个JEP引入了巢的概念,其中同一巢的两个成员(我们的例子中的外部和内部)是同窝。为类文件格式NestHost和NestMembers定义了两个新属性。这些更改对于支持嵌套类并编译为字节码的其他语言非常有用。
此功能为java.lang.Class引入了三个新方法:
- Class getNestHost()
- Class[] getNestMembers()
- boolean isNestmateOf(Class)
此功能还需要更改Java虚拟机规范(JVMS),特别是第5.4.4节“访问控制”。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Java JDK11基于嵌套的访问控制的实现
Java(和其他语言)通过内部类支持嵌套类.要使其正常工作,需要编译器执行一些技巧.这是一个例子: public class Outer { private int outerInt; class Inner { public void printOuterInt() { System.out.println("Outer int = " + outerInt); } } } 在执行编译之前,编译器会修改它以创建类似的东西: public class Outer { private i
-
Java11中基于嵌套关系的访问控制优化详解
目录 前言 Java11 之前的实现方式 技术债务 Java11 中的实现 Nestmate 新增的 API getNestHost getNestMembers isNestmateOf 后续的改进 文末总结 前言 Java 语言很强大,但是,有人的地方就有江湖,有猿的地方就有 bug,Java 的核心代码并非十全十美.比如在JDK 中居然也有反模式接口常量 中介绍的反模式实现,以及本文说到的这个技术债务:嵌套关系(NestMate)调用方式. 在 Java 语言中,类和接口可以相互嵌套,这种
-
Java11 中基于嵌套关系的访问控制优化问题
目录 Java11 之前的实现方式 技术债务 Java11 中的实现 Nestmate 新增的 API getNestHost getNestMembers isNestmateOf 后续的改进 你好,我是看山. Java 语言很强大,但是,有人的地方就有江湖,有猿的地方就有 bug,Java 的核心代码并非十全十美.比如在 JDK 中居然也有反模式接口常量 中介绍的反模式实现,以及本文说到的这个技术债务:嵌套关系(NestMate)调用方式. 在 Java 语言中,类和接口可以相互嵌套,这种组
-
java实现基于SMTP发送邮件的方法
本文实例讲述了java实现基于SMTP发送邮件的方法.分享给大家供大家参考.具体实现方法如下: import java.util.Date; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Tra
-
详解Java 中的嵌套类与内部类
详解Java 中的嵌套类与内部类 在Java中,可以在一个类内部定义另一个类,这种类称为嵌套类(nested class).嵌套类有两种类型:静态嵌套类和非静态嵌套类.静态嵌套类较少使用,非静态嵌套类使用较多,也就是常说的内部类.其中内部类又分为三种类型: 1.在外部类中直接定义的内部类. 2.在函数中定义的内部类. 3.匿名内部类. 对于这几种类型的访问规则, 示例程序如下: package lxg; //定义外部类 public class OuterClass { //外部类静态成员变量
-
Java中基于maven实现zxing二维码功能
maven所需jar <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifac
-
Java Web基于Session的登录实现方法
本文实例讲述了Java Web基于Session的登录实现方法.分享给大家供大家参考,具体如下: package cn.com.login; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpSer
-
java实现基于SGIP协议开发联通短信的方法
本文实例讲述了java实现基于SGIP协议开发联通短信的方法.分享给大家供大家参考.具体如下: 近段时间,由于公司的业务需要,开发出了联通短信.此文章的编写也是根据网上的一些示例来完成的.闲话少说,下面来看代码:(运行此程序的时候需要导入华为的开发包,此包可以到网上下载) 下行: public class Mt { private static String SPNumber = "**********"; //接入号码 private static String ChargeNumb
-
java开发中嵌套类的详解及实例
java开发中嵌套类的详解 在java语言规范里面,嵌套类(Nested Classes)定义是: A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class that is not a nested class. 说的简单一点,就是定义在类里面的类.一般把定义内部类的外围类成为包装类(enclos
-
Java并发之嵌套管程锁死详解
·嵌套管程死锁是如何发生的 ·具体的嵌套管程死锁的例子 ·嵌套管程死锁 vs 死锁 嵌套管程锁死类似于死锁, 下面是一个嵌套管程锁死的场景: Thread 1 synchronizes on A Thread 1 synchronizes on B (while synchronized on A) Thread 1 decides to wait for a signal from another thread before continuing Thread 1 calls B.wait()
随机推荐
- Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
- WCF配置心得
- js移动端图片压缩上传功能
- php安装xdebug/php安装pear/phpunit详解步骤(图)
- JS函数的定义与调用方法推荐
- C#中事务处理和非事务处理方法实例分析
- Linux系统下自行编译安装MySQL及基础配置全过程解析
- javascript解析json数据的3种方式
- python获取android设备的GPS信息脚本分享
- jquery ajax后台返回list,前台用jquery遍历list的实现
- js常用函数 不错
- JavaScript输入分钟、秒倒计时技巧总结(附代码)
- Shell中的for循环总结
- 安装SQL2008时提示删除SQL2005Express工具的解决方法
- JQuery右键菜单插件ContextMenu使用指南
- php简单截取字符串代码示例
- 深入二叉树两个结点的最低共同父结点的详解
- Java面试题之基本语法(图解)
- 让LBS输出自动适应屏幕大小的图片的修改方法
- 自定义spring mvc的json视图实现思路解析