java - 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
解决方案
推荐阅读
- python - 如何根据另一列值迭代pandas DataFrame多索引和过滤
- git - 如何删除超出容量限制的文件
- javascript - 在 Windows 上运行 forever.js 时出错 - “'C:\Program' 未被识别为内部或外部命令、可运行程序或批处理文件”
- flutter-web - How to build flutter web app in debug mode?
- java - 片段中的按钮 onClick 中的 NullPointerException
- android - WorkManager - 当我们同时使用默认初始化和自定义初始化时,我们是否应该删除默认初始化程序?
- c++ - 默认/样板代码在 Visual Studio 2017 中给我错误。E1574。虚幻。但是构建成功
- mysql - MySQL 事件——执行需要 EVENT 权限?
- c# - 如何一次运行两个不同的视图文件?
- html - 使用 ::before 在图像上添加叠加层