美文网首页
Class文件

Class文件

作者: Shaw_Young | 来源:发表于2021-07-14 17:06 被阅读0次

字节码文件里面是什么?

源代码经过编译器编译之后便会生成一个字节码文件,字节码是一种二进制的类文件,它的内容是JVM的指令,而不像C、C++经由编译器直接生成机器码

什么是字节码指令?(byte code)

Java虚拟机的指令由一个字节长度的、代表某种特定操作含义的操作码(opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(operand)所构成。虚拟机中许多指令不包含操作数,只有一个操作码。

Class文件本质和内部数据类型

  • Class类的本质
    任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,Class文件实际上它并一定以磁盘文件的形式存在。
    Class文件是一组以8位字节为基础单位的二进制流

  • Class文件格式
    Class的结构不像XML等描述语言,由于没有任何分隔符号,所以在其中的数据项,无论是字节顺序还是数量,都是被严格限定的,哪个字节代表什么含义,长度是多少,先后顺序如何,都不允许改变。

Class文件格式采用一种类似C语言结构体的方式进行数据存储,这种结构中只有两种类型:无符号数

  • 无符号数属于基本的数据结构,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成字符串值。
  • 表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性以”_info“结尾。表用于描述有层次关系的复合结构的数据,整个Class文件本质上就是一张表。由于表没有固定长度,所以通常会在其前面加上个数说明。

换句话说,充分理解了每一个字节码文件的细节,自己也可以反编译出Java源文件来。

  • Class文件结构概述
    Class文件的结构并不是一成不变的,随着Java虚拟机的不断发展,总是不可避免地会对Class文件结构做出一些调整,但是其基本结构和框架是非常稳定的。

Class文件的总体结构如下:
1、魔数
2、Class文件版本
3、常量池
4、访问标志
5、类索引,父类索引,接口索引集合
6、字段表集合
7、方法表集合
8、属性表集合

ClassFile {
    u4             magic;
    u2             minor_version;
    u2             major_version;
    u2             constant_pool_count;
    cp_info        constant_pool[constant_pool_count-1];
    u2             access_flags;
    u2             this_class;
    u2             super_class;
    u2             interfaces_count;
    u2             interfaces[interfaces_count];
    u2             fields_count;
    field_info     fields[fields_count];
    u2             methods_count;
    method_info    methods[methods_count];
    u2             attributes_count;
    attribute_info attributes[attributes_count];
}
类型 名称 说明 长度 数量
u4 magic 魔数,识别Class文件个数 4个字节 1
u2 minor_version 副本版本号(小版本) 2个字节 1
u2 major_version 主版本号(大版本) 2个字节 1
u2 constant_pool_count 常量池计数器 2个字节 1
cp_info constant_pool 常量池表 n个字节 constant_pool_count-1
u2 access_flags 访问标识 2个字节 1
u2 this_class 类索引 2个字节 1
u2 super_class 父类索引 2个字节 1
u2 interfaces_count 接口计数器 2个字节 1
u2 interfaces 接口索引集合 2个字节 interfaces_count
u2 fields_count 字段计数器 2个字节 1
field_info fields 字段表 n个字节 fields_count
u2 methods_count 方法计数器 2个字节 1
method_info methods 方法表 n个字节 methods_count
u2 attributes_count 属性计数器 2个字节 1
attribute_info attributes 属性表 n个字节 attributes_count

相关文章

  • ClassLoder学习笔记

    ClassLoder 负责加载class文件,class文件在文件开头有特定的文件标识,将class文件字节码内容...

  • Java类装载器

    一、负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文...

  • java常用命令行参数

    运行class文件执行带main方法的class文件,命令行为:java 运行jar文件中的...

  • 热修复-从java文件到生成apk你需要知道的全过程

    一、从java文件到class文件 1.class文件 class文件就是一种文件格式,被JVM识别。如下图jav...

  • Discuz!数据库操作DB类和C::t类介绍

    类定义文件 DB类: 文件\source\class\class_core.php class DB extend...

  • 使用命令行执行Java程序

    确认运行环境 准备源文件生成文件: 编辑源文件内容 编译.class文件 运行.class文件

  • Android插件化技术——【class学习】

    class 文件的定义 class 文件就是能够被 JVM 识别,加载并且执行的文件格式。从定义来看,class ...

  • Class文件

    Class文件是啥 编译后被Java虚拟机所执行的代码使用了一种平台中立(不依赖于特定硬件及操作系统的)的二进制格...

  • .CLASS文件

    java class 文件是对Java程序二进制文件格式的精确定义。每一个Java class文件都对一个Java...

  • Class 文件

    总体结构 java 虚拟机规范的定义 u1 u2 u4 u8 分别表示 无符号单字节 2字节 4字节 8字节的整数...

网友评论

      本文标题:Class文件

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