gpt4 book ai didi

java - 关于 .jar 文件的一点困惑

转载 作者:行者123 更新时间:2023-11-30 06:34:06 25 4
gpt4 key购买 nike

在计算机科学中,我了解到 .jar 文件基本上是一组经过编译的压缩 .java 文件。因此,当您拥有一个项目时,您可以拥有一堆压缩类(一个 .jar),而不是那 20 个 .java 文件。去年在 CSI 中,我们使用了一个名为 DanceStudio 的 .jar 文件,我们必须使用它来让脚在地板上行走。今年,我们正在使用一个不同的程序来更好地理解 java,所以我解压缩了包含 26 个类的 .jar 文件,然后我对其进行了反编译。我想尝试通过编译所有 .java 文件和使程序运行所需的其他文件(Walker、Foot 等)来创建一个程序。当我尝试编译所有这些文件时,它会说我有重复文件(Walker、Foot 等)我不明白的是,如果 .jar 文件基本上是相同的东西,只是压缩形式,为什么会编译。同样让我困惑的是.jar中的Foot、ETC文件其实更复杂,代码也更多。

谁能解释一下 .jar 文件实际上是如何工作的并将这些文件分开,以及它如何与不在 .jar 文件中的重复类一起运行?

最佳答案

首先,您在解释 .jar 文件时遗漏了一个步骤。

.jar 文件是.class 文件的集合。 .class 文件是通过编译.java 文件生成的。

通常单个.java 文件将生成单个.class 文件,因为它将包含单个类型定义。但是有几种方法可以让一个 .java 文件生成多个 .class 文件(内部/嵌套类、匿名类、顶级非公共(public)类、. ..),所以它不是 必然 .java 文件和 .class 文件之间的一对一关联。

然后还有一个困惑,为什么反编译的 Java 源代码看起来比原始 Java 源代码更复杂。这个问题很容易回答:编译步骤不是设计可逆的。

当 Java 编译器将 .java 文件转换为 .class 文件时,它会生成最适合执行的格式。该格式不会表示与 Java 源文件完全相同的概念。例如:Java 字节码中没有经典的“if”。它将通过适当的跳转命令来实现。

所有这些都意味着将 .class 文件转换回 .java 文件的过程很复杂,而且通常并不完美。

关于java - 关于 .jar 文件的一点困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7405725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com