是否有可能把.class
文件转化成.java
文件?
如何实现这个操作?
从这种方式提取的代码正确吗?
.java
文件,它将编译为.class
文件,但这个.java
文件不一定与原始源代码相同。例如,循环结构可能会以不同的方式出现,而任何仅在编译时存在的内容(例如泛型和注释)都不会被重新创建。aa.a(ab)
这样的代码,而不是employee.setName(name)
,很难弄清楚正在发生什么。除了之前的回答,最近出现了一批新的反编译器,包括Procyon、CFR、JD和Fernflower。
以下是截至2015年3月的现代反编译器列表:
您可以在线测试上述反编译器,无需安装,并自行做出明智的选择。 云端Java反编译器:http://www.javadecompilers.com/
您可以使用其中一种可用的Java反编译器实现此目的。由于您正在使用可能已被编译器优化(内联静态变量,重新构造控制流等)的字节码进行工作,因此您得到的结果可能与最初编译的代码不完全相同,但它们在功能上是等效的。
这是完全可能的。搜索“Java 反汇编器”。
但源代码注释和临时变量将不可用。
如果你反编译一个类并发现代码过于复杂,变量名和方法名像 a、b、c... 这样,那就意味着该项目已经被混淆了。
虽然不是一个反编译器,但JDK 包含 javap,一种反汇编工具:
javap -c org.example.MyClass
根据您的用例,了解或使用此内容可能仍然是有趣的。
请注意,类文件反编译的结果取决于类文件中包含的信息。如果我记得正确的话,包含调试信息(参见 javac 的 -g 标志)非常重要,特别是对于变量命名等方面。
java
标签只能用于目标文件(.java)。它并不表示.class是由Java生成的...你读过问题吗:--)我肯定是我的错,因为我的英语很糟糕(既不是第一语言也不是第二语言),但我确定这不是这种讨论的正确媒介,也没有任何进展...我退出了! - user85421