javap -v 命令

javap -v 命令用于查看 Java 类文件的详细信息,包括类的结构、字段、方法、属性、注解等。下面是一个详细的示例,演示如何使用 javap -v 命令来查看类的详细信息:

假设我们有一个名为 Person 的 Java 类,它如下所示:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void displayInfo() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

我们首先需要编译这个类,以生成 Person.class 文件:

javac Person.java
 

 接下来,我们可以使用 javap -v 命令来查看 Person.class 文件的详细信息。以下是示例用法和输出:

javap -v Person.class

 

C:\Minecloud\IDEA_workspace\jvm01\src\main\java\com\wsd>javac Person.java

C:\Minecloud\IDEA_workspace\jvm01\src\main\java\com\wsd>javap -v Person.class
Classfile /C:/Minecloud/IDEA_workspace/jvm01/src/main/java/com/wsd/Person.class
  Last modified 2023年9月21日; size 1042 bytes
  SHA-256 checksum ca81b253d43f0bafe6d0056821fa5aeb4e37918e6c10faba6408c0143d25732c
  Compiled from "Person.java"
public class com.wsd.Person
  minor version: 0
  major version: 61
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #8                          // com/wsd/Person
  super_class: #2                         // java/lang/Object
  interfaces: 0, fields: 2, methods: 2, attributes: 3
Constant pool:
   #1 = Methodref          #2.#3          // java/lang/Object."<init>":()V
   #2 = Class              #4             // java/lang/Object
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               java/lang/Object
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Fieldref           #8.#9          // com/wsd/Person.name:Ljava/lang/String;
   #8 = Class              #10            // com/wsd/Person
   #9 = NameAndType        #11:#12        // name:Ljava/lang/String;
  #10 = Utf8               com/wsd/Person
  #11 = Utf8               name
  #12 = Utf8               Ljava/lang/String;
  #13 = Fieldref           #8.#14         // com/wsd/Person.age:I
  #14 = NameAndType        #15:#16        // age:I
  #15 = Utf8               age
  #16 = Utf8               I
  #17 = Fieldref           #18.#19        // java/lang/System.out:Ljava/io/PrintStream;
  #18 = Class              #20            // java/lang/System
  #19 = NameAndType        #21:#22        // out:Ljava/io/PrintStream;
  #20 = Utf8               java/lang/System
  #21 = Utf8               out
  #22 = Utf8               Ljava/io/PrintStream;
  #23 = InvokeDynamic      #0:#24         // #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
  #24 = NameAndType        #25:#26        // makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
  #25 = Utf8               makeConcatWithConstants
  #26 = Utf8               (Ljava/lang/String;)Ljava/lang/String;
  #27 = Methodref          #28.#29        // java/io/PrintStream.println:(Ljava/lang/String;)V
  #28 = Class              #30            // java/io/PrintStream
  #29 = NameAndType        #31:#32        // println:(Ljava/lang/String;)V
  #30 = Utf8               java/io/PrintStream
  #31 = Utf8               println
  #32 = Utf8               (Ljava/lang/String;)V
  #33 = InvokeDynamic      #1:#34         // #1:makeConcatWithConstants:(I)Ljava/lang/String;
  #34 = NameAndType        #25:#35        // makeConcatWithConstants:(I)Ljava/lang/String;
  #35 = Utf8               (I)Ljava/lang/String;
  #36 = Utf8               (Ljava/lang/String;I)V
  #37 = Utf8               Code
  #38 = Utf8               LineNumberTable
  #39 = Utf8               displayInfo
  #40 = Utf8               SourceFile
  #41 = Utf8               Person.java
  #42 = Utf8               BootstrapMethods
  #43 = MethodHandle       6:#44          // REF_invokeStatic java/lang/invoke/StringConcatFactory.makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Lja
va/lang/Object;)Ljava/lang/invoke/CallSite;
  #44 = Methodref          #45.#46        // java/lang/invoke/StringConcatFactory.makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)L
java/lang/invoke/CallSite;
  #45 = Class              #47            // java/lang/invoke/StringConcatFactory
  #46 = NameAndType        #25:#48        // makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
  #47 = Utf8               java/lang/invoke/StringConcatFactory
  #48 = Utf8               (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
  #49 = String             #50            // Name: \u0001
  #50 = Utf8               Name: \u0001
  #51 = String             #52            // Age: \u0001
  #52 = Utf8               Age: \u0001
  #53 = Utf8               InnerClasses
  #54 = Class              #55            // java/lang/invoke/MethodHandles$Lookup
  #55 = Utf8               java/lang/invoke/MethodHandles$Lookup
  #56 = Class              #57            // java/lang/invoke/MethodHandles
  #57 = Utf8               java/lang/invoke/MethodHandles
  #58 = Utf8               Lookup
{
  public com.wsd.Person(java.lang.String, int);
    descriptor: (Ljava/lang/String;I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=3
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: aload_0
         5: aload_1
         6: putfield      #7                  // Field name:Ljava/lang/String;
         9: aload_0
        10: iload_2
        11: putfield      #13                 // Field age:I
        14: return
      LineNumberTable:
        line 8: 0
        line 9: 4
        line 10: 9
        line 11: 14

  public void displayInfo();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
         0: getstatic     #17                 // Field java/lang/System.out:Ljava/io/PrintStream;
         3: aload_0
         4: getfield      #7                  // Field name:Ljava/lang/String;
         7: invokedynamic #23,  0             // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
        12: invokevirtual #27                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        15: getstatic     #17                 // Field java/lang/System.out:Ljava/io/PrintStream;
        18: aload_0
        19: getfield      #13                 // Field age:I
        22: invokedynamic #33,  0             // InvokeDynamic #1:makeConcatWithConstants:(I)Ljava/lang/String;
        27: invokevirtual #27                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        30: return
      LineNumberTable:
        line 14: 0
        line 15: 15
        line 16: 30
}
SourceFile: "Person.java"
BootstrapMethods:
  0: #43 REF_invokeStatic java/lang/invoke/StringConcatFactory.makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/Ca
llSite;
    Method arguments:
      #49 Name: \u0001
  1: #43 REF_invokeStatic java/lang/invoke/StringConcatFactory.makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/Ca
llSite;
    Method arguments:
      #51 Age: \u0001
InnerClasses:
  public static final #58= #54 of #56;    // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles

C:\Minecloud\IDEA_workspace\jvm01\src\main\java\com\wsd>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值