首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以可编程的方式使用javap

以可编程的方式使用javap
EN

Stack Overflow用户
提问于 2013-01-21 15:45:53
回答 2查看 2K关注 0票数 5

我们能以可编程的方式在我们自己的java代码中使用javap吗?

例如,以下代码:

代码语言:javascript
复制
public class TestClass {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

在命令行中使用javap,我们得到:

代码语言:javascript
复制
// Header + consts 1..22 snipped
const #22 = String      #23;    //  hello world
const #23 = Asciz       hello world;

public static void main(java.lang.String[]);
  Signature: ([Ljava/lang/String;)V
  Code:
   Stack=2, Locals=1, Args_size=1
   0:   getstatic       #16; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:   ldc     #22; //String hello world
   5:   invokevirtual   #24; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   8:   return
  // Debug info snipped
}

我能使用javap的API只打印常量池吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-22 12:17:17

Apache BCEL提供了.class文件解析的封装,提供了一套接口。几乎对于.class文件中的每个元素,在BECL API中都有一个对应的类来表示它。因此,在某种程度上,如果只想打印出类文件的某些部分,就不是那么简单了。这里有一个你可以参考的简单例子,注意org.apache.bcel.classfile.ClassParser

代码语言:javascript
复制
    ClassParser cp = new ClassParser("TestClass.class");
    JavaClass jc = cp.parse();
    ConstantPool constantPool = jc.getConstantPool(); // Get the constant pool here.
    for (Constant c : constantPool.getConstantPool()) {
        System.out.println(c); // Do what you need to do with all the constants.
    }
票数 2
EN

Stack Overflow用户

发布于 2013-11-21 11:58:40

没有用于javap内部的API,但是您可以在com.sun.tools.javap包中查找javap的源代码。入口类是com.sun.tools.javap.Main。因此,运行javap的另一种方法是java -cp $JAVA_HOME/lib/tools.jar com.sun.tools.javap.Main YourTestClass

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14434320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档