Java Class文件格式access_flags 描述的是当前类(或者接口)的访问修饰符, 如public, private等, 此外, 这里面还存在一个标志位, 标志当前的额这个class描述的
来源:互联网 发布:淘宝详情页多大尺寸 编辑:程序博客网 时间:2024/06/06 08:37
access_flags 描述的是当前类(或者接口)的访问修饰符, 如public, private等, 此外, 这里面还存在一个标志位, 标志当前的额这个class描述的是类, 还是接口。access_flags 的信息比较简单, 下面列出access_flags 中的各个标志位的信息。本来写这个系列博客参考的是《深入java虚拟机》, 但是这本书比较老了, 关于java 5以后的新特性没有进行解释,这本书中指列出了5个标志值, 而最新的JVM规范是针对java 7 的, 其中加入了额外的三个标志位。 分别是ACC_SYNTHETIC, ACC_ANNOTATION 和 ACC_ENUM 。
标志名
标志值标志含义针对的对像ACC_PUBLIC0x0001public类型所有类型ACC_FINAL0x0010final类型类ACC_SUPER0x0020使用新的invokespecial语义类和接口ACC_INTERFACE0x0200接口类型接口ACC_ABSTRACT0x0400抽象类型类和接口ACC_SYNTHETIC0x1000该类不由用户代码生成所有类型ACC_ANNOTATION 0x2000注解类型注解ACC_ENUM 0x4000枚举类型枚举其他标志就不做介绍了, 这些标志都很简单。 读者感觉比较陌生的可能是ACC_SUPER这个标志。 读者会想, 类型不能被super关键字修饰啊, 那这个ACC_SUPER是做什么的呢?表中可以看出, 它的含义是:使用新的invokespecial语义 。 invokespecial是一个字节码指令, 用于调用一个方法, 一般情况下, 调用构造方法或者使用super关键字显示调用父类的方法时, 会使用这条字节码指令。 这正是ACC_SUPER这个名字的由来。 在java 1.2之前, invokespecial对方法的调用都是静态绑定的, 而ACC_SUPER这个标志位在java 1.2的时候加入到class文件中, 它为invokespecial这条指令增加了动态绑定的功能。 这里可能有几个概念读者不是很明白, 如静态绑定, 动态绑定等, 这些概念会在以后的博客中详细介绍。
还有一点需要说明, 既然access_flags 出现在class文件中的类的层面上, 那么它只能描述类型的修饰符, 而不能描述字段或方法的修饰符, 希望读者不要将这里的access_flags 和后面要介绍的方法表和字段表中的访问修饰符相混淆。
此外, 在Java 5 的中, 引入和注解和枚举的新特性, 那么可以推测, ACC_ANNOTATION 和 ACC_ENUM是在Java 5版本中加入的。 class文件虽然总体上保持前后一致性, 但他也不是一成不变的, 也会跟着Java版本的提升而有所改变, 但是总体来说, class文件格式还是相对稳定的, 变动的地方不是很多。
0 1
- Java Class文件格式access_flags 描述的是当前类(或者接口)的访问修饰符, 如public, private等, 此外, 这里面还存在一个标志位, 标志当前的额这个class描述的
- 描述 private、protected、internal和public修饰符的
- 关于文件描述符的close-on-exec标志位
- 文件描述符的FD_CLOEXEC标志
- 文件描述符,文件描述符标志,文件状态标志 三个的区别和联系
- [jvm解析系列][六]class里的常量池,访问标志,类的继承关系,如何把一个类在字节码中描述清楚?
- APUE-3.4 对于指定的描述符打印文件标志
- 对于指定的描述符打印文件标志
- Java的访问权限修饰符public、默认(包访问权限)、protected、private
- java里面的四种访问权限修饰符(private、缺省、protected、public)
- java-访问修饰符public,private,protected,以及不写(默认)时的区别
- java 修饰符(public private protected friendly)的理解
- 怎样记住标志寄存器的标志位
- Java class 中public、protected 、friendly、private的区别
- Java class 中public、protected 、friendly、private的区别
- Java class 中public、protected 、friendly、private的区别
- c#中public,private,internal等修饰符的运用
- 简述 private ,provected,public,internal 修饰符的访问权限。
- 编译器链接选项中运行时库的区别
- TCP/IP四层模型
- MyEclipse 10.0 对Hibernate4.1 的支持(使用的是MySql 5.6数据库)
- Raysoft.Framework.Xml.Xml2DatasetHelper
- spring jar 下载方法
- Java Class文件格式access_flags 描述的是当前类(或者接口)的访问修饰符, 如public, private等, 此外, 这里面还存在一个标志位, 标志当前的额这个class描述的
- PHP编码优化加速技巧
- Raysoft.Framework.Xml.XmlHelper
- window.location 与window.open区别
- 从键盘输入任意个数字,以0为结尾,输出其中最大值
- html5开发Android应用屏幕适配问题
- 黑马程序员----集合
- SPFA 邻接表
- 能够编译的万能makefile