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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python函數介紹:exec函數的介紹及範例引言:在Python中,exec是一種內建函數,它用於執行儲存在字串或檔案中的Python程式碼。 exec函數提供了一種動態執行程式碼的方式,使得程式可以在執行時間根據需要產生、修改和執行程式碼。本文將介紹exec函數的使用方法,並給出一些實際的程式碼範例。 exec函式的使用方法:exec函式的基本語法如下圖所示:exec

如何使用Java來寫一個簡單的學生成績報表產生器?學生成績報表產生器是可以幫助老師或教育者快速產生學生成績報告的工具。本文將介紹如何使用Java來撰寫簡單的學生成績報表產生器。首先,我們要定義學生對象和學生成績對象。學生對象包含學生的姓名、學號等基本訊息,而學生成績對象則包含學生的科目成績和平均成績等資訊。以下是一個簡單的學生物件的定義:public

Python函數介紹:abs函數的用法和範例一、abs函數的用法介紹在Python中,abs函數是一個內建函數,用於計算給定數值的絕對值。它可以接受一個數字參數,並傳回該數字的絕對值。 abs函數的基本語法如下:abs(x)其中,x是要計算絕對值的數值參數,可以是整數或浮點數。二、abs函數的範例下面我們將透過一些具體的範例來展示abs函數的用法:範例1:計算

Python函數介紹:isinstance函數的用法和範例Python是一門功能強大的程式語言,提供了許多內建函數,使得程式設計變得更加方便和有效率。其中一個非常有用的內建函數是isinstance()函數。本文將介紹isinstance函數的用法和範例,並提供具體的程式碼範例。 isinstance()函數用來判斷一個物件是否是指定的類別或類型的實例。該函數的語法如下

Oracle中的DECODE函數是一種條件式,常用於在查詢語句中根據不同的條件傳回不同的結果。本文將詳細介紹DECODE函數的語法、用法和範例程式碼。一、DECODE函數語法DECODE(expr,search1,result1[,search2,result2,...,default])expr:要進行比較的表達式或欄位。 search1,

Go语言的缩进规范及示例Go语言是一种由Google开发的编程语言,它以简洁、清晰的语法著称,其中缩进规范在代码的可读性和美观性方面起着至关重要的作用。本文将介绍Go语言的缩进规范,并通过具体的代码示例进行详细说明。缩进规范在Go语言中,缩进使用制表符(tab)而非空格。每级缩进为一个制表符,通常设置为4个空格的宽度。这样的规范统一了代码风格,使得团队合作编

如何使用Java來寫一個簡單的學生考勤管理系統?隨著科技的不斷發展,學校管理系統也不斷更新和升級。學生考勤管理系統是其中重要的一環,它能幫助學校追蹤學生的出勤狀況,提供數據分析和報告。本文將介紹如何使用Java來寫一個簡單的學生考勤管理系統。一、需求分析在開始編寫之前,我們需要先確定係統的功能和需求。基本的功能包括學生資訊的註冊和管理、學生考勤資料的記錄和

Python函數介紹:eval函數的功能和範例在Python程式設計中,eval函數是非常有用的一個函數。 eval函數可以將一個字串作為程式碼執行,它的功能非常強大。在本文中,我們將介紹eval函數的詳細功能,以及一些使用範例。一、eval函數的函數eval函數的功能非常簡單,它可以將一個字串作為Python程式碼來執行。這意味著,我們可以將一個字串
