JVM虚拟机-Class文件之访问标志

简介: JVM虚拟机-Class文件之访问标志

 一、访问标志的概念

常量池结束之后,紧接着的两个字节代表访问标志,这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是接口还是类;是否被定义为public类型;是否定义为abstract类型;如果是类的话,是否被声明为final等。

access_flages中共有两个字节(16位)可以使用,没有使用到的标志为要求一律为0。如果有多个访问标志,那通过“OR”的方式组合在一起。

二、访问标志具体含义

标志名称  标志值 含义
ACC_PUBLIC 0x00 01 是否为Public类型
ACC_FINAL 0x00 10 是否被声明为final,只有类可以设置
ACC_SUPER 0x00 20 是否允许使用invokespecial字节码指令的新语义.
ACC_INTERFACE 0x02 00 标志这是一个接口
ACC_ABSTRACT 0x04 00 是否为abstract类型,对于接口或者抽象类来说,次标志值为真,其他类型为假
ACC_SYNTHETIC 0x10 00 标志这个类并非由用户代码产生
ACC_ANNOTATION 0x20 00 标志这是一个注解                                                                             
ACC_ENUM            0x40 00 标志这是一个枚举

三、实例分析

案例一

定义一个类:

public class HelloWord {
}

image.gif

image.gif编辑

00 21可以推断是由ACC_PUBLIC和ACC_SUPER通过OR组合而成。

通过命令javap -verbose  HelloWord.class来查看,发现确实是 ACC_PUBLIC, ACC_SUPER组合而成:

image.gif编辑

案例二

定义一个接口:

public interface HelloWord {
}

image.gif

image.gif编辑

06 01又是怎么组合的呢?通过命令javap -verbose  HelloWord.class来查看,发现是 ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT组合而成:

image.gif编辑

参考资料:

    1. Class文件详解_IT_GJW的博客-CSDN博客_class文件是什么
    2. class文件访问标志 - 炎泽 - 博客园
    相关文章
    |
    4天前
    |
    安全 Java
    对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解
    对 JVM 的类加载机制以及寻找字节码文件的“双亲委派模型”的理解
    6 0
    |
    14天前
    |
    存储 Java
    深入理解Java虚拟机:JVM内存模型
    【4月更文挑战第30天】本文将详细解析Java虚拟机(JVM)的内存模型,包括堆、栈、方法区等部分,并探讨它们在Java程序运行过程中的作用。通过对JVM内存模型的深入理解,可以帮助我们更好地编写高效的Java代码,避免内存溢出等问题。
    |
    4天前
    |
    存储 前端开发 Java
    深入浅出JVM(四)之类文件结构
    深入浅出JVM(四)之类文件结构
    深入浅出JVM(四)之类文件结构
    |
    4天前
    |
    存储 缓存 安全
    深入浅出JVM(三)之HotSpot虚拟机类加载机制
    深入浅出JVM(三)之HotSpot虚拟机类加载机制
    |
    4天前
    |
    存储 缓存 算法
    深入浅出JVM(一)之Hotspot虚拟机中的对象
    深入浅出JVM(一)之Hotspot虚拟机中的对象
    |
    5天前
    |
    前端开发 Java 应用服务中间件
    在虚拟机的Windows操作系统中:通过Jar方式若依项目,以及在外部的访问!
    在虚拟机的Windows操作系统中:通过Jar方式若依项目,以及在外部的访问!
    |
    5天前
    |
    Oracle Java Serverless
    JVM工作原理与实战(三十六):GraalVM虚拟机
    JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了GraalVM、GraalVM的两种运行模式、GraalVM应用场景、参数优化和故障诊断等内容。
    14 1
    |
    6天前
    |
    存储 监控 安全
    JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈
    JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了运行时数据区、Java虚拟机栈等内容。
    11 0
    |
    19天前
    |
    存储 自然语言处理 Java
    【JVM】深入理解虚拟机(上)
    【JVM】深入理解虚拟机(上)
    10 0
    |
    21天前
    |
    存储 安全 Java
    深入理解Java虚拟机(JVM)
    深入理解Java虚拟机(JVM)
    18 0