语法糖
Java语言设计者为了在工程上提高开发效率,设计了很多语法糖。
Java反编译工具可以反编译class文件或jar包文件,得到Java源代码。
只是,有时候我们需要得到包含语法糖的代码,有时候,需要“剥开”语法糖的代码。
比如,需要了解代码的业务逻辑是,带糖的代码更易读;我们在研究Java编译逻辑时,需要不带糖的代码,看看这些糖到底隐藏了什么。
Fernflower
IDEA 一般会默认安装插件Java Bytecode Decompiler
.这个插件使用了Java反编译工具Fernflower
,而Fernflower
反编译后源代码很多是包含语法糖的。enum
是Java的一个语法糖,这里以其为例,看一下效果:
1 | public enum Sex { |
查看class文件,和源代码基本没有差异
1 | // |
CFR
CFR是另外一个Java反编译工具。
其提供了一些开关,让我们选择生成的源代码是否包含糖。
但是,其生成的源代码为纯文本文件,不是一个GUI工具,用户体验并不好。
Bytecode Viewer
Bytecode Viewer是一个强大的反编译工具,其集成了6个Java反编译库(包含Fernflower和CFR),Andorid反编译类库和字节码类库。
这个工具提供GUI界面,可以提升使用CFR的用户体验。
下面上面enum
示例的反编译效果:
- 左边为Fernflower的反编译效果
- 右边为CRF的反编译效果。我们可以看到enum其实是定义了一个继承自
Enum
类的子类
下图展示了CFR的语法糖开关: