如何建立使用者自定義 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 變數,因此它們被打印出來。有一個建構函式和一個方法。