什么是编译?
对java来说,编译就是把一个.java文件变成一个.class字节码文件的过程;
.java文件是人类易读的,而.class文件是二进制的,人们难以读懂,有时候没有源码文件的话可能需要对jar包进行反编译,把jar包中的.class文件变为.java文件,开发者才好读懂代码逻辑,所以反编译是将.class文件变为.java的过程。
如何反编译?
我们现在的java开发者使用的开发工具一般都是idea了,借助idea的插件可以方便的反编译jar包。
1、首先我们先检查下idea是否已经默认安装了反编译插件java-decompiler.jar了,这个插件一般是idea默认捆绑带上的。
通过File->settings->Plugins查看,在搜索框搜索byte,会出现如下两个插件,其中:
bytecode viewer顾名思义是用于查看字节码文件的;
而java bytecode decompiler则是用于对字节码文件反编译的。
可以看到这两个插件下都有一个标识bundled,说明它们是与idea捆绑的,即安装了idea后默认安装了它们。
![](https://img.haomeiwen.com/i8841514/d40d1e90c48aba3f.png)
而java-decompiler.jar这个插件的安装路径为:
./IntelliJ_IDEA_Community_Edition_2020.2.4/plugins/java-decompiler/lib/java-decompiler.jar
2、反编译情况
1)通过idea操作
默认我们通过idea点开一个.class文件,看到的不是二进制信息,而是可读的代码,这是因为idea默认自动做了反编译。
那我们通过这种方式如何反编译查看一个jar包呢?
a)在idea中新建一个目录,把要反编译的jar包拷贝到这个目录下,然后选择这个jar包右键,选择Add as Library,可以把这个jar包文件添加到当前项目、解压展开且idea自动给反编译成.java文件了,里面可以看到这个jar包所有基于.class文件反编译后的java代码。
![](https://img.haomeiwen.com/i8841514/8b74e223f02fd29e.png)
![](https://img.haomeiwen.com/i8841514/13d64054694abeda.png)
2)通过java-decompiler.jar手动执行命令反编译整个jar包
这种方式可以不需要先把jar包加到idea,可以独立于idea之外被反编译
1、确定反编译jar包位置
/d/java/jdk/lib/tools.jar
2、确定反编译后文件的输出位置,注意输出目录必须得事先存在,反编译过程不会自动创建,如果不存在就会报错目标目录不存在
/d/test/
3、执行命令进行反编译
java -cp "./java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true /d/java/jdk/lib/tools.jar /d/test/
引号里的就是反编译插件jar包,后面跟的是jar包执行主类,最后的是需要反编译的jar包以及输出目录
![](https://img.haomeiwen.com/i8841514/4a60a4544661fdcc.png)
![](https://img.haomeiwen.com/i8841514/ed0bda30f64956a5.png)
![](https://img.haomeiwen.com/i8841514/091bed9251957ef6.png)
将反编译后的解压文件用idea打开查看
![](https://img.haomeiwen.com/i8841514/f5d661b24b9eae43.png)
网友评论