java asm工具类_asm工具类TraceClassVisitor使用 | 学步园

ASM是java字节码操纵和分析的框架。

下面介绍一下asm  org.objectweb.asm.util包中工具类TraceClassVisitor的使用。

TraceClassVisitor能够将java字节码以文本的方式展现出来。示例如下:

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import org.objectweb.asm.ClassWriter;

import org.objectweb.asm.Opcodes;

import org.objectweb.asm.util.TraceClassVisitor;

/**

* TraceClassVisitor usage

*

*/

public class TestClassWriter {

public static void main(String[] args) throws UnsupportedEncodingException {

ClassWriter cw = new ClassWriter(0);

TraceClassVisitor cv = new TraceClassVisitor(cw, new PrintWriter(System.out));

cv.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC + Opcodes.ACC_ABSTRACT + Opcodes.ACC_INTERFACE,

"test/asm/examples/Comparable", null, "java/lang/Object",

new String[] { "test/asm/examples/Mesurable" });

cv.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "LESS", "I", null, new Integer(-1)).visitEnd();

cv.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "EQUAL", "I", null, new Integer(0)).visitEnd();

cv.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "GREATER", "I", null, new Integer(1)).visitEnd();

cv.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_ABSTRACT, "compareTo", "(Ljava/lang/Object;)I", null, null).visitEnd();

cv.visitEnd();

// byte[] b = cw.toByteArray();

// System.out.println(new String(b));

// System.out.println(Type.getType(String.class).getDescriptor());

}

}

运行后得到的java字节码为

// class version 49.0 (49)

// access flags 0x601

public abstract interface test/asm/examples/Comparable implements test/asm/examples/Mesurable {

// access flags 0x19

public final static I LESS = -1

// access flags 0x19

public final static I EQUAL = 0

// access flags 0x19

public final static I GREATER = 1

// access flags 0x401

public abstract compareTo(Ljava/lang/Object;)I

}

直观可见!在类中

TraceClassVisitor cv = new TraceClassVisitor(cw, new PrintWriter(System.out));

这一行使用了System.out的输出,会把上述结果输送到控制台。在这里可以选用别的输出,例如输出到文件等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值