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

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告