
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 命令的帮助消息。
立即学习“Java免费学习笔记(深入)”;
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中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号