如何创建用户自定义 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 变量,因此它们被打印出来。有一个构造函数和一个方法。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP