如何建立使用者自定義 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