Java Decompiler2025年3月17日 | 阅读 3 分钟 Java 反编译工具是一种特殊的反编译工具,它以 class 文件为输入,以 Java 源代码为输出。反编译正是编译过程的逆过程。因此,反编译工具不会产生源代码的副本。这是因为在编译程序的过程中,一部分信息会从源代码中丢失。 但是有很多复杂性,例如,Java 代码是有结构的,而字节码则没有结构。此外,转换不是一对一的:两个不同的 Java 程序可能会产生相同的字节码。 以下是可用的 Java 反编译工具:
JAD DecompilerJAD 是一个命令行应用程序。它用 C++ 编写。主要功能是反汇编 .class 文件。JAD 可以从控制台部署,并将 Java 类反编译为源代码。通过这种方式,开发人员可以深入了解 Java 运行时库的代码,甚至美化代码,为重新编译做准备。存在覆盖源代码文件的风险,尤其是在使用 '-o'(无需确认即可覆盖输出文件)参数时。 示例 让我们创建一个简单的 Java 程序来添加两个数字。 请按照以下步骤将 .class 文件转换为可读的 Java 源代码。这里我们使用 JAD 反编译工具。 步骤 1: 从 https://bit.ly/2XuRzT5 下载 JAD 工具 步骤 2: 解压缩 zip 文件并获取 jad.exe。 ![]() 步骤 3: 在您解压缩 zip 文件的同一文件夹中创建一个 .java 文件(DecompilerDemo.java)。 步骤 4: 编译并运行 .java 文件。它将在相应的文件夹中生成一个 .class 文件。 ![]() 步骤 5: 现在将 .class 文件和 jad 应用程序移动到另一个文件夹。 ![]() 步骤 6: 输入命令:jad DecompilerDemo ![]() 上面的命令将在相应的文件夹中生成一个 .jad 文件。 ![]() 步骤 7: 输入命令:jad ?s java DecompilerDemo ![]() 它将在同一文件夹中生成 .java 文件。 ![]() 打开 DecompilerDemo.java,我们得到以下代码 我们可以观察到,编写的 .java 文件与生成的 .java 文件不同,但输出相同。 Java 类文件反汇编器 javap 命令 javap 是一个随 JDK 附带的 Java 命令行工具。它用于反汇编类文件并打印该类的可读版本。其输出取决于使用的选项。不使用任何选项时,javap 会打印传递给它的类的包、受保护的以及公共的字段和方法。如果您没有用于创建类的源文件,javap 也可用于查找一个类可用的方法。javap 命令的一般格式是 选项 javap 命令提供了许多选项。其中一些是
使用 javap 命令反汇编类文件 生成上述程序的类文件,并使用以下命令反汇编类文件。 输出 以下输出显示了类文件内部的内容。 ![]() 但是我们无法通过使用 javap 命令获得 Java 源代码。因此,有许多反编译工具可以将 .class 文件转换为 .java 文件。 下一主题# |
Java 编程语言以其丰富的标准库而闻名,该库包含大量类和实用程序,有助于开发健壮高效的应用程序。在这些类中,System 类占有特殊的位置。它提供了访问系统...的访问权限。
阅读 3 分钟
? 在现代 Java 开发中,处理 JSON 数据是一项典型任务。为了有效处理数据,必须能够将 JSON 字符串转换为 Java 对象。为了完成这种转换,我们将在此指南中研究三个流行的开源库:Gson、JSON-Simple 和 Jackson。我们将...
阅读 6 分钟
在 Java 中,我们在线程同步中使用信号量。它用于控制对使用计数器变量的共享资源的访问。Java 还提供了一个 Semaphore 类,其中包含用于控制对共享资源的访问的构造函数和各种方法。我们将讨论...
阅读 8 分钟
内存中类的结构 Java 程序中的每个类都会在 Java 程序编译时转换为字节码。字节码的主要目的是存储将由 Java 虚拟机 (JVM) 执行的指令。Class 对象负责...
阅读 8 分钟
在 Java 中,多态性是面向对象编程的一个概念,它允许我们以不同的形式执行单个操作。在本节中,我们将仅讨论 Java 中的动态多态性。多态性“多态性”一词是由两个词组合而成的,即 ploy 和 morphs。即...
阅读 3 分钟
在本文中,我们将了解 Java 中的单例枚举。您将能够理解如何使用它、它的目的以及最重要的是它的优点和缺点。让我们来了解一下编程中的单例是什么。单例 单例类是一个...
阅读 4 分钟
多线程是 Java 中的一个强大概念,它允许我们创建并发程序,从而有效利用可用资源。理解多线程的一个经典例子是使用两个单独的线程打印奇数和偶数。在本节中,我们将探讨如何实现这一点...
5 分钟阅读
Java 8(或更高版本)的一个显著特性是 Java 并行流。它是为了利用处理器上的各种核心而设计的。通常,任何只有一个处理流的 Java 代码都是顺序执行的。然而,通过使用并行流,我们可以...
阅读 6 分钟
java.nio.DoubleBuffer 具有 get() 函数。DoubleBuffer 类用于读取缓冲区当前位置的双精度值,然后递增该位置。语法:public abstract double get() 返回值:缓冲区当前位置的双精度值由...返回。
阅读 3 分钟
Java 的 java.util 包中的 Arrays 类提供了一系列静态方法,用于简化数组操作。它提供了填充、排序、搜索等功能。这些方法增强了数组操作,有助于编写更简洁、更高效的代码。让我们考察一下 Arrays 类提供的操作……
11 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India