( Java面试题 | Java 学习指南 )
※ 编译 Compile
将一个 *.java文件编译成 *.class 文件的过程,称为编译。
比如,HelloWorld.java 被编译后得到 HelloWorld.class
※ 反编译 Decompile
在.class文件里包含了完全的信息,包含类名、方法、属性、注解,除了注释文字之外的所有信息。所以从.class文件可以恢复得到原来的*.java文件,而且一丝不差!
从 *.class 逆向得到 *.java 的过程,称为反编译。
反编译之后,得到的*.java和原始代码文件几乎完全相同,除了注释文字。所以,当你把*.class或者 *.jar 交到别人手里时候,别人可以很容易的得到原始代码。
具体的反编译效果展示,可以参考《项目应用篇》之“反编译"一章。
* 如何防止别人反编译?
没有办法。就好比一个C程序可以反编译为汇编代码一样,*.class可以反编译得到Java代码。
但是,并不是完全没有办法,在业界普遍采用proguard混淆技术来对抗反编译,具体可以参考《项目应用篇》之“proguard混淆技术"一章。