jdk 版本 jdk1.8.0_201
编译是将java文件变为class文件,反编译是将class文件还原成java文件
javap - disassemble one or more class files , disassemble 反汇编
一些官方的参考文档
Java Platform, Standard Edition Documentation
https://docs.oracle.com/javase/8/


javac 任意 .java文件后生成 对应的 class 文件




参数为英语字母 L 不是 1 。

D:\ideaProject\microservices\common\src\main\java\com\example\common\basic>javap -v AutoIncrement.class
Classfile /D:/ideaProject/microservices/common/src/main/java/com/example/common/basic/AutoIncrement.class
Last modified 2022-8-22; size 637 bytes
MD5 checksum b38b74575c0f592187174134bd6f4cfd
Compiled from "AutoIncrement.java"
public class com.example.common.basic.AutoIncrement
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #5.#21 // java/lang/Object."":()V
#2 = Fieldref #22.#23 // java/lang/System.out:Ljava/io/PrintStream;
#3 = Methodref #24.#25 // java/io/PrintStream.println:(I)V
#4 = Class #26 // com/example/common/basic/AutoIncrement
#5 = Class #27 // java/lang/Object
#6 = Utf8 <init>
#7 = Utf8 ()V
#8 = Utf8 Code
#9 = Utf8 LineNumberTable
#10 = Utf8 LocalVariableTable
#11 = Utf8 this
#12 = Utf8 Lcom/example/common/basic/AutoIncrement;
#13 = Utf8 main
#14 = Utf8 ([Ljava/lang/String;)V
#15 = Utf8 args
#16 = Utf8 [Ljava/lang/String;
#17 = Utf8 a
#18 = Utf8 I
#19 = Utf8 SourceFile
#20 = Utf8 AutoIncrement.java
#21 = NameAndType #6:#7 // "":()V
#22 = Class #28 // java/lang/System
#23 = NameAndType #29:#30 // out:Ljava/io/PrintStream;
#24 = Class #31 // java/io/PrintStream
#25 = NameAndType #32:#33 // println:(I)V
#26 = Utf8 com/example/common/basic/AutoIncrement
#27 = Utf8 java/lang/Object
#28 = Utf8 java/lang/System
#29 = Utf8 out
#30 = Utf8 Ljava/io/PrintStream;
#31 = Utf8 java/io/PrintStream
#32 = Utf8 println
#33 = Utf8 (I)V
{
public com.example.common.basic.AutoIncrement();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
LineNumberTable:
line 9: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this Lcom/example/common/basic/AutoIncrement;
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=2, args_size=1
0: iconst_1
1: istore_1
2: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
5: iinc 1, -1
8: iload_1
9: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
12: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
15: iinc 1, 1
18: iload_1
19: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
22: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
25: iload_1
26: iinc 1, -1
29: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
32: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
35: iload_1
36: iinc 1, 1
39: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
42: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
45: iload_1
46: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
49: return
LineNumberTable:
line 11: 0
line 12: 2
line 13: 12
line 14: 22
line 15: 32
line 16: 42
line 17: 49
LocalVariableTable:
Start Length Slot Name Signature
0 50 0 args [Ljava/lang/String;
2 48 1 a I
}
SourceFile: "AutoIncrement.java"
如何在idea中使用 javap 命令反汇编



说明: javap命令作用于class文件,需要在target目录下存在对应的class文件,否则会报错。

我们执行 maven clean 命令后看看效果

工作目录就是 class文件存放的目录 ,正确运行截图如下所示。




https://notepad-plus-plus.org/
Download Notepad++ for Windows
下载插件