搜尋
首頁Javajava教程Java中的Javap工具及範例

Java中的Javap工具及範例

Aug 28, 2023 am 08:09 AM
範例java編程javap工具

Java中的Javap工具及範例

javap 工具是檢索特定類別或介面資訊的有用方法。透過其反彙編功能,javap 命令(也稱為 Java 反彙編器)被賦予了為使用者提供全面的內部資訊的作用。從 -c 或 -verbose 這兩個選項中,每個選項都會給出獨特的結果,使用者能夠發現自己處於字節碼和字節碼編排領域。如果不使用任何選項,javap 會執行輸入類別的 public、protected 和 package 欄位和方法。

文法

javap [option] [classname]

不使用選項時

範例

javap class_name

輸出

C:\Users\Aashi>javap java.lang.Object 
Compiled from "Object.java"
public class java.lang.Object {
   public java.lang.Object();
   public final native java.lang.Class<?> getClass();
   public native int hashCode();
   public boolean equals(java.lang.Object);
   protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException; public java.lang.String toString();
   public final native void notify();
   public final native void notifyAll();
   public final native void wait (long) throws java.lang.InterruptedException;
   public final void wait(long, int) throws java.lang.InterruptedException;
   public final void wait() throws java.lang.InterruptedException;
   protected void finalize() throws java.lang.Throwable;
   static {};
}

何時使用選項

以下是每個選項以及如何應用它的說明 -

  • -help 或 --help 或 -? -

這用於列印 javap 命令的幫助訊息。

範例

javap -help

輸出

C:\Users\Aashi>javap -help 
Usage: javap <options> <classes> 
where possible options include: 
-help --help -?      Print this usage message
-version             Version information
-V  -verbose         Print additional information
-1                   Print line number and local variable tables
-public              Show only public classes and members
-protected           Show protected/public classes and members
-package             Show package/protected/public classes and members (default)
-p -private          Show all classes and members
-C                   Disassemble the code
-S                   Print internal type signatures
-sysinfo             Show system info (path, size, date, MD5 hash) of class being processed
-constants           Show final constants
-classpath <path>    Specify where to find user class files
-cp <path>           Specify where to find user class files
-bootclasspath <path> Override location of bootstrap class files
  • -版本

用來列印Java的版本資訊。

範例

javap -version

輸出

C:\Users\Aashi>javap -version
1.8.0_151
  • -v 或 -verbose -

這用於列印附加資訊,例如堆疊大小、局部變數數量和方法參數。

範例

javap -v class_name

輸出

C:\Users\Aashi>javap -v java.lang.Object
Classfile jar:file:/C:/Program%20Files/Java/jdk1.8.0_151/jre/lib/rt.jar! /java/lang/Object.class
Last modified Sep 5, 2017; size 1497 bytes
MD5 checksum 074ebc688a81170b8740f1158648a3c7 
Compiled from "Object.java"
public class java.lang.Object 
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Integer         999999
#2 - String          #16                //@
#3 = String          #38                //nanosecond timeout value out of range
#4 = String          #42               //timeout value is negative
#5 - Utf8            ()I
#6 = Utf8            ()Ljava/lang/Object;
#7 - Utf8            ()Ljava/lang/String;
#8 = Utf8            ()V
#9 - Utf8            (I)Ljava/lang/String;
#10 - Utf8           (J)V
#11 = Utf8           (JI)V
#12 - Utf8           (Ljava/lang/Object;)Z
#13 = Utf8           (Ljava/lang/String;)V
#14 - Utf8           <clinit>
#15 = Utf8           <init>
#16 - Utf8           @
#17 - Utf8           Code
#18 = Utf8           Exceptions
#19 - Utf8           Line Number Table
#20 = Utf8           Signature
#21- Utf8            Source File
#22 = Utf8           StackMapTable
#23 Utf8             Append
#24 Utf8             Clone
#25 = Utf8           Equals
#26 Utf8             finalize
#27 = Utf8           getClass
#28 Utf8             getName
#29 - Utf8           hashCode
#30 = Utf8           java/lang/Class
#31 - Utf8           java/lang/CloneNotSupportedException
#32 = Utf8           java/lang/IllegalArgumentException
#33 - Utf8           Java/lang/Integer
#34 Utf8             java/lang/InterruptedException
  • -l -

這用於列印行號和局部變數表。

範例

javap -l class_name

輸出

C:\Users\Aashi>javap -1 java.lang.Object 
Compiled from "Object.java” 
public class java.lang.Object { 
   public java.lang.Object();
   LineNumberTable:
   line 37: 0

   public final native java.lang.Class<?> getClass();

   public native int hashCode();

   public boolean equals(java.lang.Object);
   LineNumberTable:
   line 149: 0

   protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException;

   public java.lang.String toString();
   LineNumberTable:
   line 236: 0

   public final native void notify();

   public final native void notifyAll();

   public final native void wait(long) throws Java.lang.InterruptedException;
   public final void wait(long, int) throws java.lang.InterruptedException;
   LineNumberTable:
   line 447: 0
   line 448: 6 
   line 451: 16 
   line 452: 26 
   line 456: 36 
   line 457: 40 
   line 460: 44
   line 461: 49

   public final void wait() throws java.lang.InterruptedException;
   LineNumberTable:
   line 502:0
   line 503: 5
   protected void finalize() throws java.lang.Throwable;
}
  • -公開

這用於僅列印公共類別和成員。

範例

javap -public class_name

輸出

C:\Users\Aashi>javap -public java.lang.Object 
Compiled from "Object.java" 
public class java.lang.Object {
   public java.lang.Object();
   public final native java.lang.Class<?> getClass();
   public native int hashCode();
   public boolean equals(java.lang.Object);
   public java.lang.String toString();
   public final native void notify();
   public final native void notifyAll();
   public final native void wait (long) throws java.lang.InterruptedException; public final void wait (long, int) throws java.lang.InterruptedException; public final void wait() throws java.lang.InterruptedException;
}
  • -受保護

這用於列印受保護/公共類別和成員。

範例

javap -protected class_name

輸出

C:\Users\Aashi>javap -protected java.lang.Object 
Compiled from "Object.java"
public class java.lang.Object {
   public java.lang.Object();
   public final native java.lang.Class<?> getClass();
   public native int hashCode();
   public boolean equals(java.lang.Object);
   protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException; 
   public java.lang.String toString();
   public final native void notify();
   public final native void notifyAll();
   public final native void wait(long) throws java.lang.InterruptedException;
   public final void wait (long, int) throws java.lang.InterruptedException;
   public final void wait() throws java.lang.InterruptedException;
   protected void finalize() throws java.lang.Throwable;
}
  • -套件

這用於列印包/受保護/公共類別和成員(預設)。

範例

javap -package class_name

輸出

C:\Users\Aashi>javap -package java.lang.Object 
Compiled from "Object.java"
   public class java.lang.Object {
   public java.lang.Object();
   public final native java.lang.Class<?> getClass();
   public native int hashCode();
   public boolean equals(java.lang.Object);
   protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException; 
   public java.lang.String toString();
   public final native void notify();
   public final native void notifyAll();
   public final native void wait (long) throws java.lang.InterruptedException;
   public final void wait (long, int) throws java.lang.InterruptedException;
   public final void wait() throws java.lang.InterruptedException;
   protected void finalize() throws java.lang.Throwable;
   static {};
}
  • -c

這用於列印反彙編程式碼。

範例

javap -c class_name

輸出

C:\Users\Aashi>javap -c java.lang.Object 
Compiled from "Object.java"
public class java.lang.Object (public java.lang.Object();
Code:
0: return
public final native java.lang.Class<?> getClass();

public native int hashCode();

public boolean equals(java.lang.Object);
Code:
0: aload e
1: aload_1
2: 1f_acmpne   9
5:iconst_1 
6: goto        10
9: iconst_0
10: ireturn

protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException;

public java.lang.String toString();
Code:
0: new             #52      //class java/lang/StringBuilder
3: dup
4: invokespecial   #74     //Method java/lang/StringBuilder."<init>": ()V
7: aload_e
8: invokevirtual   #73    // Method getClass: ()Ljava/lang/Class;
11: invokevirtual  #67    // Method java/lang/class.getName:()Ljava/lang/String;
14: invokevirtual  #76   // Method java/lang/StringBuilder.append: (Ljava/lang/String;) Ljava/lang/StringBuilder;
17: 1dc            #2    // String @
19: invokevirtual  #76   // Method java/lang/StringBuilder.append: (Ljava/lang/String;)Ljava/lang/StringBuilder;
22: aload_e
23: invokevirtual  #78   // Method hashCode: ()I
26: invokestatic   #69   // Method java/lang/Integer.toHexString: (I) Ljava/lang/String;
29: invokevirtual  #76   // Method java/lang/StringBuilder.append: (Ljava/lang/String;) Ljava/lang/StringBuilder;
32: invokevirtual  #75   // Method java/lang/StringBuilder.toString: ()Ljava/lang/String;
35: areturn
public final native void notify();
  • -s -

這用於列印內部類型簽名。

範例

javap -s class_name

輸出

C:\Users\Aashi>javap -s java.lang.Object 
Compiled from "Object.java" 
public class java.lang.Object { 
   public java.lang.Object(); 
   descriptor: ()V

   public final native java.lang.Class<?> getClass(); 
   descriptor: ()Ljava/lang/class;

   public native int hashCode();
   descriptor: ()I

   public boolean equals(java.lang.Object);
   descriptor: (Ljava/lang/Object;)Z

   protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException; 
   descriptor:()Ljava/lang/Object;

   public java.lang.String toString();
   descriptor: ()Ljava/lang/String;

   public final native void notify();
   descriptor: ()V

   public final native void notifyAll();
   descriptor: ()V

   public final native void wait(long) throws java.lang.InterruptedException; descriptor: (J)V

   public final void wait(long, int) throws java.lang.InterruptedException; descriptor: (JI)V

   public final void wait() throws java.lang.InterruptedException; 
   descriptor: ()V
   protected void finalize() throws java.lang.Throwable;
   descriptor: ()V
   static {}; 
   descriptor: ()V
}
  • -sysinfo -

#這用於列印正在處理的類別的系統資訊(路徑、大小、日期、MD5 哈希)。

範例

javap -sysinfo class_name

輸出

C:\Users\Aashi>javap -sysinfo java.lang.Object
Classfile jar:file:/C:/Program%20Files/Java/jdk1.8.0_151/jre/lib/rt.jar! /java/lang/Object.class 
Last modified Sep 5, 2017; size 1497 bytes
MD5 checksum 074ebc688a81170b8740f1158648a3c7 
Compiled from "Object.java"
public class java.lang.Object {
   public java.lang.Object();
   public final native java.lang.Class<?> getClass();
   public native int hashCode();
   public boolean equals(java.lang.Object);
   protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException;
   public java.lang.String toString();
   public final native void notify();
   public final native void notifyAll();
   public final native void wait (long) throws java.lang.InterruptedException;
   public final void wait (long, int) throws java.lang.InterruptedException;
   public final void wait() throws java.lang.InterruptedException;
   protected void finalize() throws java.lang.Throwable;
   static {};
}
  • -常數 -

這用於列印類別的最終常數。

範例

javap -constants class_name

輸出

C:\Users\Aashi>javap -constants java.lang.Object 
Compiled from "Object.java"
public class java.lang.Object {

   public java.lang.Object();
   public final native java.lang.Class<?> getClass();
   public native int hashCode();
   public boolean equals(java.lang.Object);
   protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException; 
   public java.lang.String toString();
   public final native void notify();
   public final native void notifyAll();
   public final native void wait (long) throws java.lang.InterruptedException;
   public final void wait(long, int) throws java.lang.InterruptedException;
   public final void wait() throws java.lang.InterruptedException;
   protected void finalize() throws java.lang.Throwable;
   static {}; 
}

結論

javap 工具對於 Java 編碼人員來說是一個多方面且非常強大的工具,使他們能夠診斷和調試類文檔、評估字段和方法以及從類文檔的字節碼生成清晰的代碼。這個不可或缺的工具適合所有技能水平的 Java 開發人員,使他們能夠輕鬆擴展知識並排除 Java 程式故障。對於任何有抱負的程式設計師來說,javap 工具都是不可替代的財產,它肯定有助於快速提高他們的程式設計能力。此外,其廣泛的功能可以幫助編碼人員完善他們的實踐,為他們在建立 Java 應用程式時提供競爭優勢。

以上是Java中的Javap工具及範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:tutorialspoint。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具