zoukankan      html  css  js  c++  java
  • 类文件结构

    Class文件中只有两种数据类型:无符号数和表。

    无符号数属于基本数据类型:u1,u2.u4.u8分半表示1,2,4,8个字节的无符号数。用来描述数组,索引引用,数据值或者按utf-8编码的字符串值。

    表是多个无符号数和表构成,习惯以_info结尾。

    整个class文件本质就是一张表。

    image

    class文件的组成是按上述表的大小和内容组成的。

    image

    1.魔数和class文件的版本

    u4是固定的CAFEBABE

    u2次版本号00 00

    u2主版本号00 33 版本号为1.7

    image

    二、常量池

    u2常量池计数值,从1开始

    常量池中主要放两大类常量:字面量和符号引用(字面量比较接近于Java的常量概念。如文本字符串、声明finald的常量值等;符号艺勇则属于编译原理方面的概念:类和接口的全限定名,字段的名称和描述,字符的名称符和描述符)。

    常量池中每一项常量都是一个表。

    image

    表的开始第一位都是一个u1表示为,取值如上表。

    0x0000000A是0x07对照上表是CONSTANT_Class_info

    其常量的结构

    image

    对照class文件图0x0002 即指向了第二个索引的常量

    0x01是utf-8类型的常量,其结构表

    image

    image

    其他的可以使用Jdk bin下面的工具javap

    image

    其他的常量结构表如下

    image

    image

    三、访问标志

    在常量池结束后紧接着两个字节代表访问标志。标识类或接口的访问信息。

    包括:class是类还是接口,是否是public,是否是abstract,是类的话,是否被声明final

    image

    该类为普通类0x0021

    四、类索引、父类索引与接口索引集合

    紧接着访问类型之后是类索引(u2)、父类索引(u2)、与接口索引集合(u2集合)

    image

    0x0001 0x0003 0x0000 分别表示类,父类,索引集合

    五、字段表集合

    字段主要包括的信息:字段的作用域,是否可以实例化,可变性,并发性,类型,名称。

    image

    image

    个数,修饰符,名称索引,描述索引,

    private int age;

    image

    image

    六、属性表集合

    在class文件、字段表、方法表都可以携带自己的属性表,用于描述某些场景的特有信息。

    由于涉及到的内容太多,可以直接使用javap –verbose来查看其含义。

  • 相关阅读:
    2716 [Violet 3] 天使玩偶
    BZOJ1017魔兽地图DotR 樹形DP
    BZOJ1016最小生成树计数 最小生成树 + 排列组合
    BZOJ1014火星人prefix Splay維護序列 + 字符串哈希
    BZOJ1010玩具裝箱Toy
    BZOJ1009GT考试 DP + KMP + 矩陣快速冪
    BZOJ1008[HNOI2008]越狱
    BZOJ1006神奇的国度 弦圖染色 最大勢算法
    BZOJ1005明明的烦恼 Prufer + 分解質因數 + 高精度
    poj2182(线段树求序列第k小)
  • 原文地址:https://www.cnblogs.com/javabeginer/p/7229490.html
Copyright © 2011-2022 走看看