繁体   English   中英

字节代码到Java源代码

[英]Byte code to Java source code

是否可以将.class文件转换为.java文件?

如何才能做到这一点?

从此选项中提取的代码的正确性如何?

有可能的。 您需要Java Decompiler才能执行此操作。

你会发现它主要是做得非常出色。 您将获得的是一个有效的.java文件,它将编译为.class文件,但此.java文件不一定与原始源代码相同。 循环结构之类的东西可能会有所不同,并且不会重新创建任何编译时间,例如泛型和注释。

如果代码已被混淆,则可能会出现问题。 这是一个改变类文件以使其难以反编译的过程。 例如,类名和变量名都变得相似,所以你最终会得到像aa.a(ab)这样的代码而不是employee.setName(name)并且很难弄清楚发生了什么。

我记得使用JAD来做这件事,但我不认为这是积极维护的,所以它可能不适用于从未版本的Java。 谷歌搜索java反编译器会给你很多选择。

这可以使用一个可用的Java反编译器 由于您使用的字节代码可能已经被编译器优化(内联静态变量,重构控制流等),因此您获得的内容可能与最初编译的代码不完全相同,但它在功能上是等效的。

加上以前的答案:最近,新的反编译浪潮即将来临,即Procyon,CFR,JD,Fernflower

以下是截至2015年3月的现代反编译器列表:

  • 南河
  • CFR
  • JD
  • Fernflower

您可以在线测试上面提到的反编译器,不需要安装,并做出自己的教育选择。 云中的Java反编译器: http //www.javadecompilers.com/

它总是可能的。 搜索“java反汇编程序”。

但是源代码注释和临时变量将不可用。

如果您反编译一个类,并且看到代码太复杂,变量名称和方法名称就像a,b,c ......这意味着项目被混淆了。

不完全是反编译器,但JDK包含javap,一个反汇编程序

javap -c org.example.MyClass

根据您的使用情况,了解或使用它可能仍然很有趣。

请注意,类文件反编译的结果取决于类文件中包含的信息。 如果我没记错的话,包含的调试信息( 参见javac的-g标志 )很重要,特别是对于变量的命名等。

DJ是易于使用的java 反编译器 只需打开任何.class文件,它将显示其java代码。

此外,您可以使用jadClipse插件直接将.class反编译为.java

What about the correctness of the code extracted from this option?
在任何情况下,任何java反编译器生成的代码都不会与原始java类中编写的代码相同。 因为它只是将字节码解码为java代码。 您唯一可以确定的是,输出将与原始java代码的输出相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM