javap -c не дает мне байт-код методов

#java #bytecode #javap

#java #байт-код #javap

Вопрос:

У меня есть файл 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:UsersAskGitITUProjPCPP-private-Garseweek01codeanswersfinalRed.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
}
 

Который на самом деле не показывает мне никакого кода из двух методов. Запуск javap с помощью -v или -verbose также не помогает. Как я должен запустить команду, чтобы получить фактический байт-код двух методов в классе?

Моя версия Java — 12.01

Комментарии:

1. Используйте -v флаг.

2. sscce.org Является ли ваш фактический метод частным? Вам нужен -private флаг?

3. Я не могу воспроизвести это (Java 15.0.1), использование javap -c <путь к классу> показывает мне (приблизительно) ваш ожидаемый результат. Какова ваша точная версия javac? Как вы это скомпилировали?

4. Выходные данные не совпадают. Ваш исходный код показывает непубличный класс, а вывод javap показывает общедоступный класс. Возможно, есть еще больше несоответствий, поэтому я бы последовал предположению @Brett Kail. Используйте -p или -private для отображения закрытых членов.

5. Даже если я повторюсь: выходные данные не совпадают . Файл класса не был скомпилирован из версии исходного кода, которую вы опубликовали.