• 类文件结构


    Java平台无关性的基石   class文件字节码

    任何一个calss文件都对应唯一一个类或者接口的定义信息,但是,类或者接口的定义信息比一定都得定义在class文件中,例如,类或者接口也可以通过类加载器直接生成

    class文件是一组以8字节为基础单位的二进制流

    无符号数和表

    无符号数:u1 u2 u4 u8

    整个class文件就是一张表

    class文件每个字节的含义、长度、先后顺序都严格规定

    u4   magic  魔数  0xCAFEBABE

    u2   minor_version  次版本号

    u2   major_version  主版本号

    u2   constant_pool_count  常量池容量计数器(class文件空间最大的数据项目之一)  从1开始,真正的常量个数是 constant_pool_count  -  1个

    pc_info   constant_pool  常量池中存放字面量(String、final static)和符号引用(类或接口的全限定名、字段的名称和描述符、方法的名称和描述符),虚拟机运行时,从常量池中获得对应的符号引用,在类创建时或运行时解析到真正的内存地址中。常量池中的每一个都是一个表。不同类型的常量的结构不同,但是第一位都是一个标志位,标志常量的类型(UTF-8编码字符串(一般是类或接口的全限定名)、整型、浮点、长整型、双精度浮点、类或接口的符号引用、String、字段的符号引用、类中方法的符号引用、接口中方法的符号引用、……)

    u2   access-flags  访问标识(是类还是接口、public?、final?、注解?、枚举?、abstract?)

    u2   this_class  类索引(类的全限定名)

    u2   super_calss  父类索引(父类的全限定名)Java中,任何一个类都继承Object类,因此,除了Object类,任何类的父类索引都不为0

    u2   interface_count  接口个数

    u2   interfaces  接口索引集合

      类索引、父类索引、接口索引集合,定义了一个类的继承关系,他们各自指向常量池中一个类或接口的符号引用,类或接口符号引用中的索引值指向UTF-8编码字符串中的全限定名

    u2   fields_count  字段的个数(接口或者类中声明的变量,实例变量,不包括局部变量)

    field_info   fields  字段集合表(一个字段表的结构包括访问标识(用一个标志位)、字段的名字(指向常量池中的字段符号引用)、字段的类型(常量池中的描述))

    u2   mothed_count  方法的个数

    method_info   methods  方法表集合(访问标志、方法名、方法参数)

    u2   attributes_count  属性个数

    attribute_info   attribute  属性表集合(什么存放在属性表中?final staic int i = 123,此时,有一个ConstantValue属性,其值指向常量123;方法编译之后的字节码指令,存放在Code属性里)

  • 相关阅读:
    python—logger
    print默认在末尾添加一个换行符,但其实也可以不用!
    Python做int()强制类型转换的时候,小数是如何取舍的?
    Python基础之好玩的字符串格式化f-string格式
    【奔走相告】- Github送福利:用户可免费创建私有代码库啦
    我30岁了,转行学编程可以吗? 排除法告诉你答案
    Python基础之好玩的字符串格式化之类C风格
    Python基础之白话说函数
    变量 和 注释
    什么是编程语言,什么是Python解释器
  • 原文地址:https://www.cnblogs.com/duanjiapingjy/p/9517795.html
Copyright © 2020-2023  润新知