• Java Class的文件结构


    class文件是由8bits的字节流组成,全部字节构成了15个有意义的项目。这些项目之间没有任何无意义的字节,因此class文件非常紧凑。下面看一下class文件的内容具体含义:
    1.magic(魔数):
    魔数是class文件开头的4个字节,值为0xCAFEBABE,主用要用途是判断一个文件是否是class文件。
    2.minor_version、major_version(次、主版本号)
    各占2个字节。随着Java技术的发展,class文件的格式会发生变化。版本号的作用在于使得虚拟机能够认识当前加载class的文件格式。从而准确的提取class文件信息。
    3.constant_pool_count 、constance_pool(常量池) 
    常量池存储了符号常量、final常量值、基本数据类型的字面值等内容。JVM会将每一个常量构成一个常量表,每个常量表都有自己的入口地址。其中constant_pool_count就记录了有多少个常量表。常量池构成参见文章最后的表。
    4.access_flags(访问标志) 
    用来表明该class文件中定义的是类还是接口,访问修饰符是public还是缺省。类或接口是否是抽象的。类是否是final的。
    5.this_class 
    占用2个字节。  它是一个对常量池的索引。指向的是常量池中存储类名符号引用的
    6.super_class 
    占用2个字节。指向存放当前class文件所定义类的超类名字的索引的
    7.inteface_count、interfaces
    interface_count是class文件所定义的类直接实现的接口或父类实现的接口的数量。占2个字节。intefaces包含了对每个接口的CONSTANT_Class_info常量表的索引。
    8.fields_count、fields 
    fields_count表明了类中字段的数量 。fields是不同长度的field_info表的序列。这些field_info表中并不包含超类或父接口继承而来的字段。field_info表展示了一个字段的信息,包括字段的名字,描述符和修饰符。如果该字段是final的,那么还会展示其常量值。注意,这些信息有些存放在field_info里面,有些则存放在field_info所指向的常量池中。
    9.method_count、methods
    method_count表明类中方法的数量和每个方法的常量表的索引。


    常量池构成:
    常量池由一个个常量表组成,class文件共有11种常量表:

    常量表类型 标志值(占1 byte) 描述
    CONSTANT_Utf8 1 UTF-8编码的Unicode字符串
    CONSTANT_Integer 3 int类型的字面值
    CONSTANT_Float 4 float类型的字面值
    CONSTANT_Long 5 long类型的字面值
    CONSTANT_Double 6 double类型的字面值
    CONSTANT_Class 7 对一个类或接口的符号引用
    CONSTANT_String 8 String类型字面值的引用
    CONSTANT_Fieldref 9 对一个字段的符号引用
    CONSTANT_Methodref 10 对一个类中方法的符号引用
    CONSTANT_InterfaceMethodref 11 对一个接口中方法的符号引用
    CONSTANT_NameAndType 12 对一个字段或方法的部分符号引用

  • 相关阅读:
    github常用项目汇总
    javaweb Servlet接收Android请求,并返回json数据
    Hibernate 工具类
    JDBC 工具类
    050 Android 百度地图的使用
    Hibernate 连接数据库,数据库返回数据超过限制报错
    049 Android Fragment向另一个Activity传值
    java 实用Util汇总
    关于The requested PHP extension ext-pdo_sqlite * is missing from your system. Install or enable PHP's pdo_sqlite extension.的解决
    Symfony命令大全
  • 原文地址:https://www.cnblogs.com/younghome/p/4608961.html
Copyright © 2020-2023  润新知