如何创建用户自定义 Javap 工具?


有时,我们需要与类文件相关的信息。在这种情况下,我们可以使用 Java 开发工具包 (JDK) 提供的 javap 工具。我们可以获取有关类中存在的 方法、构造函数和字段的更多信息。javap 工具的目的是反汇编一个或多个类文件。它也被称为 Java 类文件反汇编器。使用 javap 工具,我们可以获取有关该特定类的字节码信息的更多信息。输出可能因使用的选项而异。

语法

javap 的语法如下:

javap [options] [classes]

解释

javap 关键字用于开头,后跟 options 命令。选项是一个可选参数。选项可以是一个或多个,并用空格分隔。这些是在 Java 中一些广泛使用的选项。

  • -help:用于显示 javap 菜单的帮助。

  • -version:用于打印发布信息。

  • -l:用于显示行号和局部变量。

  • -public:用于显示公共类和公共成员。

  • -protected:用于显示受保护的类和私有成员。

  • -c:用于反汇编代码。

  • -sysinfo:用于显示系统信息。

示例

为了理解 javap 工具的工作原理,让我们在命令提示符下执行该命令。

javap java.util.Scanner

在这里,我们使用 javap 命令反汇编 java.util 包中的 Scanner 类。下图显示了上述代码的输出。它显示了类修饰符、公共方法以及有关相同方法的详细信息。一个先决条件是在命令提示符下使 javap 工具工作需要安装 JDK。

输出

用户自定义 Javap 工具

既然我们知道可以在预构建的类上使用 javap 工具,那么也可以在用户定义的类上使用 javap 工具。

步骤

  • 创建一个用户定义的类。向其中添加构造函数和方法。

  • 在 Main 类中,获取与自定义类关联的类实例。我们使用 Class.forName() 方法。

  • 然后显示自定义类的类字段。getDeclaredFields() 方法用于返回 Field 对象的数组。包括所有公共、私有、受保护和默认字段。

  • 使用 getDeclaredConstructors() 方法显示类构造函数,我们得到在自定义类中定义的构造函数的数组。包括所有公共、私有、受保护和默认构造函数。

  • 所有类方法都使用 getDeclaredMethods() 方法获取,该方法返回方法数组。

示例

以下是如何创建用户自定义 javap 工具的示例

import java.lang.reflect.*;

// class to use custom javap tool 
class Customclass{

   int x;
   float y;
   String z;

   // class constructor
   Customclass()
   {
      x = 19;
      y=89.78894532f;
      z="javap";
   }

   //class methods
   void printData()
   {
      System.out.println(x);
      System.out.println(y);
      System.out.println(z);
   }
}

//custom javap tool
public class Main {

   public static void main(String[] args) throws Exception
   {
      Class cn = Class.forName("Customclass");

      //display the fields
      System.out.println("Class fields");
      Field[] field= cn.getDeclaredFields();
      for (int i=0;i<field.length;i++) {
         System.out.println(field[i]);
      }
   System.out.println("\n");
      //display the constructor
      System.out.println("Class constructors");
      Constructor[] cs= cn.getDeclaredConstructors();
      for (int i=0;i<cs.length;i++) {
         System.out.println(cs[i]);
      }
   System.out.println("\n");
      //display the methods
      System.out.println("Class methods");
      Method[] m= cn.getDeclaredMethods();
      for (int i=0;i<m.length;i++)
         System.out.println(m[i]);
   }
}

输出

以下是上述代码的输出

Class fields
int Customclass.x
float Customclass.y
java.lang.String Customclass.z

Class constructors
Customclass()

Class methods
void Customclass.printData()

解释

我们之前使用提到的方法获取了类字段、构造函数和方法。由于我们的类有 3 个字段——int、float 和 String 变量,因此它们被打印出来。有一个构造函数和一个方法。

更新于: 2023年7月24日

153 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告