免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
表の収集方法
ほぼ同一のフィールドのための方法の記述クラスファイルの記述は、同一の構成及び方法のテーブルのテーブルのフィールド順次アクセスフラグを含む(access_flags)を有し、名前インデックス(name_index)、記述子インデックス(description_index)、テーブルセット属性(属性)の数。
1.テーブル構造の方法を(method_info)組成
アクセスフラグ(access_flags)、名前指数(name_index)、説明指数(descriptor_index)、属性テーブルのコレクション
2.ケース
public class TestMethod {
public int add(int a,int b) {
return a+b;
}
}
テーブルのフィールドの後カウンタ方式のセットは、次にゾーン法の上にあります。私達はちょうど上記の方法が追加定義し、それは引数なしのコンストラクタであるため、2つの表示方法は、あなたは、コンストラクタについての最初の話は、あります
方法カウンタ:0×0002(2進数に対応する)、2つの方法があります。
3.コンストラクタメソッドケース
- メソッドのアクセスフラグ:0x0001に、公衆に対応します。
- メソッド名:0x0004は(4 10進数に対応する)、初期化のための定数プール第4ポイント。
- 記述子インデックス:0x0005は、定数プールの点5(5小数に相当)であり、()Vは、パラメータなしの方法、ノーリターン値を表します。
- カウンタ属性:0x0001の(1 10進数に対応する)は、メソッドテーブルは、プロパティ・シートを有することを示します。密接背後に続きます。
- テーブル名インデックス属性:0x0006(6進数に対応する)、コード用の第六の定数プールを指し、コードは、属性テーブルの種類を示します。
- 長さ属性:0000 001D(29 10進数に相当)、29は、後続のバイトコードがテーブル属性を示す情報であることを示します。
- オペランドスタックの最大深さは0x0001(10進数1に対応)は、スタックフレームの最大深度はオペランドスタックで表しています。
- 局部变量表的最大容量:0x0001(对应十进制的1),JVM调用该方法时,根据这个值设置栈帧中的局部变量表的大小。
- 机器指令数目:0x0000 0005,表示后续的5个字节是机器指令集。
- 机器指令集:0x002A、0x00B7、0x0000、0x0001、0x00B1。
- 显示异常表集合:0x0000,表示方法中没有需要处理的异常信息。
- Code属性表的属性表集合:0x0001,表示还有其他1个属性表集合。
- Code属性表集合名称:0x0007(对应十进制为7),指向常量池的LineNumberTable。
LineNumberTable属性表的就不说了,直接过掉了。
4.自定义方法案例
- 方法访问标志:0x0001,对应public。
- 方法名称:0x0008(对应十进制为8),指向常量池的第8,为add。
- 描述符索引:0x0009(对应十进制为9),指向常量池的第9,为(II)I,表示方法参数有2个都是Int类型,返回值类型是Int。
- 属性计数器:0x0001(对应十进制为1),表示该方法表中有1个属性表。紧跟在后。
- 属性表名称索引:0x0006(对应十进制为6),指向常量池的第6,为Code,表示是Code类型的属性表。
- 属性长度:0x0000 001C(对应十进制的28),表示后续28个字节是表示这个Code属性表的信息。
- 操作数栈的最大深度:0x0002(对应十进制的2),表示栈帧中操作数栈的最大深度是2。
- 局部变量表的最大容量:0x0003(对应十进制的3),JVM调用该方法时,根据这个值设置栈帧中的局部变量表的大小。
- 机器指令数目:0x0000 0004,表示后续的4个字节是机器指令集。
- 机器指令集:0x001B、0x001C、0x0060、0x00AC。
- 显示异常表集合:0x0000,表示方法中没有需要处理的异常信息。
- Code属性表的属性表集合:0x0001,表示还有其他1个属性表集合。
- Code属性表集合名称:0x0007(对应十进制为7),指向常量池的LineNumberTable。
LineNumberTable属性表的就不说了,直接过掉了。