天天看点

使用javap分析return和finally的执行字节码

常见指令:

1、putstatic #5;

--putstatic当栈顶元素出栈放到常量解析池中的#5位置

2、iconst_1

--int常量1放入操作数栈

3、aload_0

--将局部变量0位置对象取出来,压入栈push

4、invokespecial #1; //Method java/lang/Object."<init>":()V

--调用父类构造方法,并出栈pop

5、putfield #2; //Field A:[I

--putfield指把栈顶对象pop,然后赋值给常量解析池中的#2位置

6、getstatic #3; //Field/lang/System.out:Ljava/io/PrintStream;

--取出静态成员变量push入栈,常量解析池中的#3位置

7、 dup

--复制当前栈顶对象,再压入栈push

8、astore_1

--将返回对象放到局部变量位置1,pop

9、istore_2

--将栈顶元素保存到局部变量位置2,pop

10、iinc 2, 1

--将栈顶元素自加1再入栈

11、invokevirtual #8; //Method java/io/PrintStream.println:(I)

--调用打印方法

12、 bipush 6

--bipush将(byte)字节形转换成(int)整形,并且压入栈push

13、iastore

--数据元素操作指令:在位置上放入刚存入的值pop 1 ;pop 0; pop 数组对象