Code
左边的序号指的是字节码指令位置,该字节码长度为16(即0-15)
LineNumberTable
字节码位置与代码行号对应表:
起始PC代表字节码指令位置,行号就是idea上的代码行号
LocalVariableTable
局部变量表(也称为本地变量表)
名字:指的是变量名称
描述符:指的是变量类型(例如args是String类型),大写L代表引用变量类型,大写I表示int类型
起始PC:指变量生效的字节码指令行号,通常指的是idea代码创建变量的行号的下一行(例如:num变量对应的字节码行号为11,对应的代码行号为15(见第一张图),即创建num变量的下一行)
长度:即局部变量生效的长度,args变量后面16字节码指令行都生效,test变量后面8行字节码指令生效,起始PC+长度 = 总的字节码长度
操作数栈的最大深度:
操作数栈使用数组方式实现
代码追踪
- bipush:将15放入操作数栈栈顶;此处的i指的是int类型,b表示byte类型(byte类型数值范围-128~127,如果超出这个范围,例如200,此时byte就是变成short,用s表示,即sipush)
- istore_1:将操作数栈栈顶的数据取出放入局部变量表的index为1的位置(为什么不是index为0呢?因为此处方法是实例方法,有this变量在index为0的位置存储着)
- iload_1:将局部变量表index=1位置的数据取出压入操作数栈,iload_2同理
- iadd:将操作数栈数据出栈后相加,相加后的结果压入操作数栈