status
Published
slug
java-decompiler
type
Post
category
Technology
date
Jan 20, 2025
tags
笔记
工具
Java
summary
最近想要坚持技术学习,每天看一两篇的技术博客,并整理沉淀,争取进步,有所得。知其然知其所以然的Java反编译学习
最近想要坚持技术学习,每天看一两篇的技术博客,并整理沉淀,争取进步,有所得。
知其然知其所以然
很久以前,还没有决定工作找Java语言的时候,我阅读了《阿里巴巴Java开发手册》。当时只是匆匆地过了一遍,现在许多内容也不记得了。今天阅读了一篇讲书中关于「三目运算符导致NPE」的一条规约的文章[1]时,深有感触,一个小小的问题背后其实是了许多底层规定的外化。文章中的作者通过反编译,验证了三目运算符中不同表达式类型导致的差异。我也希望在之后的工作学习中向其学习,能够有「知其然知其所以然」的求知欲。
为什么是Jad?
调研Java反编译器后,了解到目前使用比较多的反编译工具主要就是javap、JD-GUI和Jad,但其中javap的反编译结果可读性较差,理解起来的难度比较高,JD-GUI的反编译结果与平时使用的Java语言最接近,即最原始的Java源代码[2]。但是若要了解编译器的工作内容,使用JAD会更贴近真实的源代码。
使用实践
Jad的安装和使用可以参考文章「强烈推荐的一款 Java 反编译工具:JAD」[2],在此不再赘述。配置好环境后,我尝试使用jad编译了一段代码,结果如下:
参考文献
[1] Hollis,阿里云开发者,《Java 开发手册》解读:三目运算符为何会导致 NPE?https://mp.weixin.qq.com/s/p1tAB44Baie5uBZZx4jsDw
[2] 沉默王二,强烈推荐的一款 Java 反编译工具:JAD,https://developer.aliyun.com/article/817204