常见指令:
一、putstatic #5;
--putstatic当栈顶元素出栈放到常量解析池中的#5位置
二、iconst_1
--int常量1放入操做数栈
三、aload_0
--将局部变量0位置对象取出来,压入栈push
四、invokespecial #1; //Method java/lang/Object."<init>":()V
--调用父类构造方法,并出栈pop
五、putfield #2; //Field A:[I
--putfield指把栈顶对象pop,而后赋值给常量解析池中的#2位置
六、getstatic #3; //Field/lang/System.out:Ljava/io/PrintStream;
--取出静态成员变量push入栈,常量解析池中的#3位置
七、 dup
--复制当前栈顶对象,再压入栈push
八、astore_1
--将返回对象放到局部变量位置1,pop
九、istore_2
--将栈顶元素保存到局部变量位置2,pop
十、iinc 2, 1
--将栈顶元素自加1再入栈 学不完的技术,如何定位很重要?
十一、invokevirtual #8; //Method java/io/PrintStream.println:(I)
--调用打印方法
十二、 bipush 6
--bipush将(byte)字节形转换成(int)整形,而且压入栈push
1三、iastore
--数据元素操做指令:在位置上放入刚存入的值pop 1 ;pop 0; pop 数组对象html
package com.****.test1;java
/**
* try-finally的执行
* @author jame
* @date 2011年9月1日11:14:01
*/
public class ReturnTest {
public static void main(String[] args) {
System.out.println("main method:"+ReturnTest.test());
}
原谅我是这样的人 static int test() { int x = 1; try { return x; } finally { ++x; System.out.println("finally:"+x); } } } Compiled from "ReturnTest.java" public class com.skyon.test1.ReturnTest extends java.lang.Object{ public com.skyon.test1.ReturnTest(); //初始化工做 Code: 0: aload_0 //将局部变量0位置对象取出来,压入栈push 1: invokespecial #1; //Method java/lang/Object."<init>":()V //调父类构造函数 4: return //返回本函数 public static void main(java.lang.String[]); Code: 0: getstatic #2; //Field a/lang/System.out:Ljava/io/PrintStream; //取出静态成员变量push入栈,常量解析池中的#2位置 3: invokestatic #3; //Method test:()I //调用test()方法 6: invokevirtual #4; //Method java/io/PrintStream.println:(I)V //调用println()方法 9: return static int test(); Code: 0: iconst_1 //将x变量的初始值1放入操做数栈 1: istore_0 //将栈顶元素保存到局部变量位置0,pop 2: iload_0 //将局部变量0位置对象取出来,压入栈push 3: istore_1 //将栈顶元素保存到局部变量位置1,pop 4: iinc 0, 1 //将栈顶元素自加1再入栈 7: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 10: iload_0 11: invokevirtual #4; //Method java/io/PrintStream.println:(I)V 14: iload_1 15: ireturn 16: astore_2 17: iinc 0, 1 20: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 23: iload_0 24: invokevirtual #4; //Method java/io/PrintStream.println:(I)V 27: aload_2 28: athrow Exception table: from to target type 2 4 16 any 16 17 16 any