2015-07-01 23 views

回答

2

您可以使用*LOAD指令加载参数,使用MethodVisitorvisitVarInsn方法。例如,考虑这样的构造:

public Foo(int i, long l, int j) {} 

您收到的值取决于第二个参数visitVarInsn(int opcode, int index)方法:

  • 对于构造函数和实例方法,0是接收器本身(this),和参数索引从1+
  • 对于静态方法,参数索引从0+
  • longdouble消耗tw ø局部变量插槽,因此下一个参数/局部变量的索引为2 + previous index

施加到例如,这产生

  • ALOAD 0负载this(或super
  • ILOAD 1负载i参数
  • LLOAD 2加载l参数
  • ILOAD4加载j参数