如何创建用户自定义 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 变量,因此它们被打印出来。有一个构造函数和一个方法。