【Java 虚拟机原理】Class 字节码二进制文件分析 三 ( 访问和修饰标志 | 类索引 | 父类索引 | 接口计数器 | 接口表 | 字段计数器 | 字段表 )(二)

简介: 【Java 虚拟机原理】Class 字节码二进制文件分析 三 ( 访问和修饰标志 | 类索引 | 父类索引 | 接口计数器 | 接口表 | 字段计数器 | 字段表 )(二)

一、访问和修饰标志


access_flags ( 访问和修饰标志 ) : 常量池后面的 2 22 位就是 访问和修饰标志 ; 访问 和 修饰标志 00 21 ; 表示 类 / 接口 的 访问权限 / 基础属性 ;


image.png


根据下面两个表解读 访问和修饰标志 ;

image.png


image.png



访问和修饰标志 00 21 ; 这是根据上述表格中的值进行位运算得到的 ;


这是 ACC_SUPER 0x0200 和 ACC_PUBLIC 0x0001 两个值进行或运算 , 得出的值 0x0021 ;


在 字节码附加信息 中的 次版本号 , 主版本号 , 后跟着的就是 访问和修饰标志 ACC_PUBLIC, ACC_SUPER , 就是根据这里的 2 22 个字节的信息得出的 ;


public class Student
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER






二、类索引


this_class ( 类索引 ) : 在 access_flags ( 访问和修饰标志 ) 后面的 2 22 字节就是 类索引 ; 这个值必须是 常量池 中的有效索引值 , 并且还要是 CONSTANT_Class_Info 类型的常量 ;


值为 00 03 , 也就是对应常量池中的 #3 常量 ;

image.png


常量池中的 #3 索引是 Student 类 ; 参考 【Java 虚拟机原理】Class 字节码二进制文件分析 二 ( 常量池位置 | 常量池结构 | tag | info[] | 完整分析字节码文件中的常量池二进制数据 ) 二、常量池字节码文件分析 3、常量池 #3 常量分析 章节 ;


Constant pool:
   #1 = Methodref          #4.#17         // java/lang/Object."<init>":()V
   #2 = Fieldref           #3.#18         // Student.name:Ljava/lang/String;
   #3 = Class              #19            // Student


后面的字节码数据, 基本都是指向了常量池中的一些引用 ;






三、父类索引


super_class ( 父类索引 ) : 在 this_class ( 类索引 ) 后面的 2 22 字节就是 父类索引 ; 这个值必须是 常量池 中的有效索引值 , 并且还要是 CONSTANT_Class_Info 类型的常量 ;


值为 00 04 , 也就是对应常量池中的 #3 常量 ;

image.png


常量池中的 #4 索引是 java/lang/Object 类 ; 参考 【Java 虚拟机原理】Class 字节码二进制文件分析 二 ( 常量池位置 | 常量池结构 | tag | info[] | 完整分析字节码文件中的常量池二进制数据 ) 二、常量池字节码文件分析 4、常量池 #4 常量分析 章节 ;


Constant pool:
   #4 = Class              #20            // java/lang/Object


后面的字节码数据, 基本都是指向了常量池中的一些引用 ;




目录
相关文章
|
5月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
453 6
|
6月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
210 11
|
5月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
278 1
|
7月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
642 23
|
6月前
|
Oracle 关系型数据库 虚拟化
在VMware的Win10虚拟机中安装使用ENSP
本文介绍了在Windows 10虚拟机上安装ENSP及相关软件的全过程,包括VirtualBox、WinPcap、Wireshark、VLC和ENSP的安装步骤,并提供图文演示,帮助用户顺利完成配置与测试。
1567 134
|
9月前
|
虚拟化 数据中心
VMware vSphere Replication 9.0.3 - 虚拟机复制和数据保护
VMware vSphere Replication 9.0.3 - 虚拟机复制和数据保护
348 0
|
5月前
|
Linux 虚拟化 iOS开发
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
1104 0
VMware Remote Console 13.0.1 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
|
5月前
|
Linux 虚拟化 iOS开发
VMware Fusion 25H2 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
VMware Fusion 25H2 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
1290 0
VMware Fusion 25H2 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式
|
5月前
|
存储 Linux 文件存储
VMware vSphere Replication 9.0.4 - 虚拟机复制和数据保护
VMware vSphere Replication 9.0.4 - 虚拟机复制和数据保护
270 2
|
7月前
|
Linux 虚拟化 iOS开发
Windows Server 2025 OVF (2025 年 8 月更新) - VMware 虚拟机模板
Windows Server 2025 OVF (2025 年 8 月更新) - VMware 虚拟机模板
745 3
Windows Server 2025 OVF (2025 年 8 月更新) - VMware 虚拟机模板