关于.jar文件有点混乱

时间:2011-09-13 17:08:40

标签: java jar

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

有人可以解释一下.jar文件是如何工作的,并将这些文件分开,以及如何使用不在.jar文件中的重复类运行它?

3 个答案:

答案 0 :(得分:5)

首先,您在解释.jar文件时缺少一步。

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

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

然后令人困惑的是,反编译的Java源代码看起来比原始Java源代码更复杂。这个很容易回答:编译步骤设计是不可逆的。

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

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

答案 1 :(得分:0)

  1. 您通常将(明文).java源文件编译为(二进制).class文件。

  2. 如果您使用包,那么类文件将位于不同的子目录中(代表包)。

  3. .jar文件是一个压缩的二进制文件,它将所有.classes放在一个紧凑,易于管理的文件中。

  4. .jar文件还可以包含其他文件,例如清单,位图和资源。

  5. .jar文件也可以“签名”以确保其内容的完整性/真实性。

  6. 以下是一些很好的链接:

    http://en.wikipedia.org/wiki/JAR_%28file_format%29

    http://download.oracle.com/javase/tutorial/deployment/jar/

    '希望有所帮助

答案 2 :(得分:0)

关于你的副本:也许你的.jar仍然在你的构建路径中,所以当你尝试用反编译的类编译你的项目时,你会有重复。检查并删除.jar,如果它仍然在您的构建路径中。