首页 > 解决方案 > javap -c 没有给我方法的字节码

问题描述

我有一个看起来像这样的java文件:

package answers;

class finalRed{
    private long l;
    public synchronized void increment(){
        l++;
    }
    public void decrement(){
        synchronized(this){
            l--;
        };
    }
}

而且我需要查看每个方法的字节码,我知道我应该使用 javap 命令。我需要这样的输出:

public synchronized void increment();
    Code:
       0: aload_0
       1: dup
       2: getfield      #2                  // Field l:J
       5: lconst_1
       6: ladd
       7: putfield      #2                  // Field l:J
      10: return

  public void decrement();
    Code:
       0: aload_0
       1: dup
       2: astore_1
       3: monitorenter
       4: aload_0
       5: dup
       6: getfield      #2                  
       9: lconst_1
      10: lsub
      11: putfield      #2                  
      14: aload_1
      15: monitorexit
      16: goto          24
      19: astore_2
      20: aload_1
      21: monitorexit
      22: aload_2
      23: athrow
      24: return

但是,运行javap -c C:\Users\Ask\Git\ITUProj\PCPP-private-Garse\week01\code\answers\finalRed.class(我可以阅读应该可以),给我这个输出:

Compiled from "finalRed.java"
public class answers.finalRed {
  public answers.finalRed();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
}

这实际上并没有向我显示这两种方法的任何代码。使用 -v 或 -verbose 运行 javap 也无济于事。我应该如何运行命令来获取类中两个方法的实际字节码?

我的java版本是12.01

标签: javabytecodejavap

解决方案


推荐阅读