读书人

ASM指南通译-10 生成方法

发布时间: 2012-10-09 10:21:45 作者: rapoo

ASM指南翻译-10 生成方法

?

图3.4MethodVisitor接口

"java/lang/IllegalArgumentException","<init>", "()V");

mv.visitInsn(ATHROW);

mv.visitLabel(end);

mv.visitFrame(F_SAME, 0, null, 0, null);

mv.visitInsn(RETURN);

mv.visitMaxs(2, 2);

mv.visitEnd();

?

在visitCode和visitEnd调用之间的方法调用和3.1.5节最后展示的字节码是精确映射的。每个调用对应一个指令,标签或者帧(唯一的例外就是label和end label的声明和构造)。

?

注意 一个label对象指定的指令就是那些紧跟在这个label的visitLabel方法调用之后。例如,end指定了RETURN指令,不是其后的frame,因为它不是一个指令。可以使用几个标签来指定相同的指令,但是一个标签必须指定一个指令。换句话说,可以针对不同的label连续调用visitLabel,但是在一个指令中使用的标签必须只能被visitLabel访问一次。最后一个限制就是标签不能共享,每个方法都有自己的标签。

读书人网 >编程

热点推荐