当前位置: 首页 > 面试题库 >

javap以可编程方式

裴甫
2023-03-14
问题内容

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

例如,以下代码:

public class TestClass {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

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

// 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仅打印常量池吗?


问题答案:

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

    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.
    }


 类似资料:
  • 问题内容: 当存在后置条件时,该方法的返回值一定不能为null,该怎么办? 我可以 但是断言可以关闭! 那可以吗 ? 还是针对此类情况使用用户定义的异常(例如NullReturnValueException)更好? 问题答案: 我认为在JVM为您执行操作之前尽早抛出NPE没问题-特别是对于null参数。对此似乎有一些争论,但是Java SE库中有许多示例正是这样做的。我不明白为什么NPE在您自己不

  • 我使用Java ASM库编译了一个类(称为Test.class)。我决定尝试使用“java”命令运行该类,以确保已正确编译该类。 然而,当我这样做的时候,我得到了“找不到或加载主类测试”的消息。我觉得这很奇怪,因为类在当前工作目录内(我也尝试过将“.”作为类路径传递,但没有用)。然后我尝试用“javap”反汇编它,这很完美,这很奇怪,因为如果javap能找到类文件,那么java肯定也能找到吗? 这

  • 问题内容: 说我有两个JavaBeans 和。 如果创建一个Person对象的列表,我想编组成这样的东西: 可以使用这里描述的技术: 使用JAXB解组/编组List 通过使用和注释JaxbList,可以将其编组为上述XML。 但是,能够重用相同的类来封送对象列表也很好。实际上,我将有许多其他类型的bean。我可以这样: 但是,理想情况下,最好用类名的复数形式替换“列表”,用类名替换“ item”。

  • 是否可以以编程方式控制以启用或禁用它?我不想只是在每个方法中编写代码来执行某种 我见过这个问题,但这只适用于启动时。我真正需要的是允许我多次启用或禁用控制器的东西。 我想过不同的方法,但不知道哪些在Spring可行。 实际上控制容器(在我的例子中是jetty),因此对该特定endpoint的请求被禁用。 以某种方式控制<code>RequestMappingHandlerMapping</code

  • 我正在尝试通过代码更改白色标记图像的颜色。我已经阅读了下面的代码应该改变颜色,但我的标记仍然是白色的。 我错过了什么吗?有没有其他方法可以更改位于我的res文件夹中的可绘制对象的颜色?

  • 编辑#2:因为它看起来像一个bug,我已经在javaFx jira中发布了一个bug报告。您必须拥有一个帐户才能访问该问题。如果有新的信息,我会及时更新这篇文章。 原始帖子:我有一个简单的UI,带有一个按钮和一个树状视图。如果按钮被按下,应该会有一个新的项目添加到树视图。此项一出现在树中就应可编辑。 我使用的CellFactory是JavaFXAPI的一部分。 如果我看看api-留档(TreeVi