美文网首页
访问标识

访问标识

作者: Shaw_Young | 来源:发表于2021-07-29 16:24 被阅读0次

访问标识(access_flag、访问标志、访问标记)

  • 在常量池后,紧跟着访问标识。该标记用两个字节表示,用于识别一些类或类接口层次的访问信息,包括:这个Class是类还是接口,是否定义为 public 类型;是否定义为 abstract 类型;如果是类的话,是否声明为 final 等。各种访问标记如下所示:
标志名称 标志值 含义
ACC_PUBLIC 0x0001 标志为public类型
ACC_FINAL 0x0010 标志声明为final,只有类可以设置
ACC_SUPER 0x0020 标志允许使用invokespecial字节码指令的新语义,JDK1.0.2之后编译出来的类的这个标志默认为真。(使用增强的方法调用父类方法)
ACC_INTERFACE 0x0200 标志这是一个接口
ACC_ABSTRACT 0x0400 是否为abstract类型,对于接口或者抽象类来说,次标志值为真,其它类型为假
ACC_SYNTHENIC 0x1000 标志此类并非由用户代码产生(既:由编译器产生的类,没有源码对应)
ACC_ANNOTATION 0x2000 标志这是一个注解
ACC_ENUM 0x4000 标志这是一个枚举
  • 类的访问权限通常为 ACC_ 开头的常量。
  • 每一种类型的表示都是通过设置访问标记的32位中的特定位来实现的。比如,若是public final的类,则该标记位 ACC_PUBLIC | ACC_FINAL。
  • 使用ACC_SUPER可以让类更准确地定位到父类的方法super.method(),现代编译器都会设置并且使用这个标记。

补充说明:

  1. 带有ACC_INTERFACE标志的class文件表示的是接口而不是类,反之则表示的是类而不是接口。
    1.如果一个class文件被设置了 ACC_INTERFACE 标志,那么同时也得设置ACC_ABSTRACT标志。同时它不能再设置 ACC_FINAL、ACC_SUPER 或 ACC_ENUM标志

    1. 如果没有设置ACC_INTERFACE标志,那么这个class文件可以具有上表中除 ACC_ANNOTATION 外的其他所有标志。当然,ACC_FINAL和ACC_ABSTRACT这类互斥的标志除外。这两个标志不得同时设置。
  2. ACC_SUPER标志用于确定类或接口里面的invokespecial指令使用的是哪一种执行语义。针对Java虚拟机指令集的编译器都应当设置这个标志。对于Java SE 8后续版本来说,无论class文件中这个标志的实际值是什么,也不管class文件的版本。

    1. ACC_SYNTHETIC标志是为了向后兼容由旧Java编译器所编译的代码而设计的。目前的 ACC_SUPER 标志在由JDK 1.0.2之前的编译器所生成的access_flags中是没有确定含义的,如果设置了该标志,那么Oracle的Java虚拟机实现会将其忽略。
  3. ACC_SYNTHETIC标志意味着该类或接口是由编译器生成的,而不是由源代码生成的。

  4. 注解类型必须设置ACC_ANNOTATION标志。如果设置了ACC_ANNOTATION标志,那么也必须设置ACC_ANNOTATION标志。

  5. ACC_ENUM标志表明该类或其父类为枚举类型。

  6. 表中没有使用的access_flags标志是为未来扩充而预留的,这些预留的标志在编译器中应该设置为0,Java虚拟机实现也应该忽略它们。

梦想很模糊,去追,它会渐变清晰。青春励志,奋斗下去别放弃。

相关文章

  • 访问标识

    访问标识(access_flag、访问标志、访问标记) 在常量池后,紧跟着访问标识。该标记用两个字节表示,用于识别...

  • java学习—— 泛型定义

    1、泛型类定义 [访问权限] class 类名称<泛型类型标识1, 泛型标识2,...,泛型标识3> { [访问...

  • classcms页面

    页面是供前台访问使用的,后台模型内增加页面后,前台可以通过页面网址访问到对应的栏目.页面标识 系统默认的页面标识:...

  • 1.C#中的类-class

    类的默认访问标识符是 internal,成员的默认访问标识符是 private 1.类的 构造函数 是类的一个特殊...

  • 面向对象:访问控制,final,static

    访问控制: 访问控制是给出一套方法,将系统中的所有功能标识出来,组织起来,托管起来,将所有的数据组织起来标识出来托...

  • C#图解教程笔记20170718

    访问修饰符 字段访问修饰符 类型 标识符; 方法访问修饰符 返回类型 方法名(){、、、} 五种成员...

  • Python review

    标识符: 标识符包括英文,数字和下划线,不能用数字开头 标识符区分大小写 单下划线开头(_foo)代表不能直接访问...

  • php判断访问者是不是蜘蛛

    使用http_user_agent标识来判断访问者是不是蜘蛛,蜘蛛的标识有好多,自己可以去查找归纳,然后放入$sp...

  • 坚持打卡学习第22天——注解

    类似功能,注册bean @Repository:将数据访问层的类标识为Spring Bean@Component:...

  • http

    http协议访问系统 1、常用的HTTP方法有哪些? GET: 用于请求访问已经被URI(统一资源标识符)识别的资...

网友评论

      本文标题:访问标识

      本文链接:https://www.haomeiwen.com/subject/pspxvltx.html