gpt4 book ai didi

java - 类文件创建概念

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

我尝试了一个奇怪的实验。我在 Eclipse 中创建了一个项目。我创建了 Abc.java,它有一个打印“Hello”的 main 方法。然后我使用 eclipse 构建了该项目。创建了一个名为 Abc.class 的类文件。我将该类文件复制到某个随机位置。然后,我导航到该类文件并使用以下命令来执行它。

java Abc

它在控制台上打印了“Hello”。到目前为止一切顺利。我假设对于一个简单的 sysout,JVM 不需要解决任何依赖关系。

接下来,我在 Eclipse 中创建了一个非常复杂的程序,为此我必须包含 15 个不同的 jar(例如 slf4j 和 apache-commons)。在 Eclipse 中构建程序后,我只是将其类文件复制到不同的位置(不是 JARS)。完成所有复杂编码的主要方法仍然在 Abc 中。

我再次点击该命令(这次我遵循包结构,因此我不得不调用一个略有不同的命令)。

java com.great.Abc

我的印象是,由于我没有在 java 命令中的类路径中添加任何 jar,因此这段代码会严重崩溃(记住它有很多依赖项)。然而,它的工作绝对正常。

有人可以解释一下为什么吗?

<小时/>

(半小时后:|)与此同时,我尝试了另一个实验,这让我更加惊讶。我将通过eclipse生成的所有类文件邮寄到另一台计算机上(注意,我没有邮寄jar文件,只邮寄了eclipse生成的类文件)。

我在那里运行了程序,希望这次它会崩溃。你猜怎么着,它运行得很完美。有任何输入吗?

这些 jar 是否仅在编译时才需要?在创建程序时,如何确保在运行时需要我使用的 jar?无论问题看起来多么愚蠢,请冷静地解释。 :)

最佳答案

在 Java 中,代码依赖关系是在类之间建立的,因此当您创建一个仅打印消息的类时,只要您的类没有使用来自 Eclipse 项目的任何类,您的 Eclipse 项目设置就没有相关性。奇特的 eclipse 设置。

即使您的类引用其他类,当该类并未真正使用它们时,这些类也可能不会在运行时加载。

即使您从一个依赖于 list 中声明的​​其他 jar 文件的 jar 文件启动 Java 程序,标准 Java 启动器也会默默地忽略这些 jar 文件中的一个或多个,并且在程序执行期间它将仅当尝试加载这些缺失的 jar 中所需的类时才报告失败。

保证程序提前中断的一种情况是其父类(super class)在运行时不存在。

关于java - 类文件创建概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25245907/

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