首先,我们 简单的写个类
package com.dongdao;
public class PromjectStart {
private int m;
public int initm() {
return m +1;
}
}
执行 javac PromjectStart.java,生成 class 文件。
用 WinHex 打开该 class 文件,得到 如下。
我们需要用到的对照表。
表1 ,常量池类型
表2 常量结构
3, 执行 javap -verbose PromjectStart.class生成的类文件结构。
分析,class结构如下。
【1】0-7 依次是 魔数 次版本 主版本。 8-9 是 常量池的大小,即 13 的 10进制 是19 ,一共有18的常量。对照 3 ,发现是 18个。
【2】继续,每一个常量都是以一个 u1 开始的,所以读 一位, 0A,然后查找表1,是Methodref,查表2,得到数据结构是,u1,u2,u2。所以,该位对应的索引是,ooo4 ,第四位索引,和 000f 第 15位索引。对着 3,发现一致。
【3】继续,读一个 u1,是 09,查表1 得到 Filerldref,查表2,数据结构是,u1,u2,u2。对应的索引是 0003 , 第3位索引, 和 第16 位索引。 对照 3 ,发现一致。
【4】 继续,读 一个 u1 是 07,查 表1 是classinfo,查 表2 是 u1,u2。对应的是18.
以此类比。。。