博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java asm 书_使用ASM来书写Java代码-2(zt)续2
阅读量:6904 次
发布时间:2019-06-27

本文共 1360 字,大约阅读时间需要 4 分钟。

等价于:

a = 2;

d)

方法:

i.

接口方法:

1.

定义:

mv = cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT,

"getA", "()V", null, null);

mv.visitEnd();

2.

调用:

mv.visitVarInsn(ALOAD, 1);

mv.visitMethodInsn(INVOKEINTERFACE, "asm/IA",

"getA", "()V");

等价于:

public interface IA{

public void geA();

}

public class A implements IA{

public void geA(){…}

}

IA a = new A();

a.getA();

ii.

一般方法:

1.

定义:

MethodVisitor mv = cw.visitMethod(ACC_PUBLIC,

"getA", "()V", null, null);

mv.visitCode();

mv.visitInsn(RETURN);

mv.visitMaxs(0, 1);

mv.visitEnd();

等价于:

public void getA() {}

2.

调用:

mv.visitVarInsn(ALOAD, 1);

mv.visitMethodInsn(INVOKEVIRTUAL, "asm/A", "getA",

"()V");

等价于:

A a = new A():

a.getA();

iii.

静态方法:

1.

定义:

MethodVisitor mv = cw.visitMethod(ACC_PUBLIC +

ACC_STATIC, "getA", "()V",

null, null);

mv.visitCode();

mv.visitInsn(RETURN);

mv.visitMaxs(0, 0);

mv.visitEnd();

等价于:

public static void getA() {}

2.

调用:

mv.visitMethodInsn(INVOKESTATIC, "asm/A", "getB",

"()V");

等价于:

A.getB();

iv.

说明:一般方法比静态方法在声明和调用时均要多传入一个this引用作为参数。另外,当使用INVOKESPECIAL来调用方法时,虚拟机将直接根据指令当中所指明的类类型来调用方法;而当使用INVOKEVIRTUAL来调用方法时,虚拟机将根据实例的实际类型来调用方法。

e)

异常处理:

i.

声明:

mv.visitTryCatchBlock(l0, l1, l1,

"java/lang/Exception");

mv.visitLabel(l0);

mv.visitLabel(l1);

等价于:

try {

} catch (Exception e) {

}

说明:在visitTryCatchBlock()当中,第一,二,三个参数均是Label实例,其中一,二表示try块的范围,三则是catch块的开始位置。而第四个参数则是异常类型。而当异常发生时,JVM将会将异常实例置于运行栈的栈顶。

转载地址:http://elodl.baihongyu.com/

你可能感兴趣的文章
Nancy 返回值详解
查看>>
架构思维案例:速学正则
查看>>
记录一则FGA审计“A用户对B用户某张表的更新操作”需求
查看>>
IntelliJ IDEA优秀插件(编程通用)
查看>>
API返回错误信息的最佳实践
查看>>
AngularJS实现三级Table列表
查看>>
scala sortBy and sortWith
查看>>
请求合并哪家强
查看>>
nodejs检查已安装模块
查看>>
solr联合多个字段进行检索(multivalued和copyfield的使用)
查看>>
准备PPT过程中的一些文档记录
查看>>
Catel(翻译)-为什么选择Catel
查看>>
SQL Server 数据库备份和还原
查看>>
微信小程序 - 贝塞尔曲线(购物车效果)
查看>>
CI框架 default_controller 如何设置为:'目录/Controller' 转
查看>>
Node.js之网游服务器实践
查看>>
Spring-SpringMVC父子容器&AOP使用总结
查看>>
service_names配置不正确,导致dg创建失败
查看>>
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN
查看>>
Spring Boot配置文件放在jar外部
查看>>