首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >编译时与运行时依赖项- Java

编译时与运行时依赖项- Java
EN

Stack Overflow用户
提问于 2010-11-25 03:57:15
回答 3查看 59.1K关注 0票数 113

Java中的编译时和运行时依赖项有什么不同?它与类路径相关,但是它们有什么不同呢?

EN

回答 3

Stack Overflow用户

发布于 2010-11-25 04:04:48

一个简单的例子就是看看像servlet api这样的api。要编译servlet,您需要servlet-api.jar,但是在运行时,servlet容器提供了一个servlet api实现,因此您不需要将servlet-api.jar添加到运行时类路径中。

票数 37
EN

Stack Overflow用户

发布于 2010-11-25 04:02:07

Java在编译时实际上并不链接任何东西。它只使用在CLASSPATH中找到的匹配类来验证语法。直到运行时,才会根据CLASSPATH将所有内容放在一起并执行。

票数 13
EN

Stack Overflow用户

发布于 2016-02-01 20:17:09

对于Java,编译时依赖项是源代码的依赖项。例如,如果A类调用B类中的一个方法,那么A在编译时依赖于B,因为A必须知道要编译的B(B的类型)。这里的诀窍应该是:编译的代码还不是一个完整的可执行代码。它包括尚未编译或存在于外部jars中的源代码的可替换地址(符号、元数据)。在链接过程中,这些地址必须替换为内存中的实际地址。要正确执行此操作,应创建正确的符号/地址。这可以通过类(B)的类型来完成。我相信这是编译时的主要依赖项。

运行时依赖关系更多地与实际的控制流相关。它涉及实际的内存地址。当你的程序运行时,它是你的依赖项。这里你需要B类的细节,比如实现,而不仅仅是类型信息。如果该类不存在,那么您将得到RuntimeException,并且JVM将退出。

通常情况下,这两个依赖项不应该向同一个方向流动。不过,这是一个面向对象的设计问题。

在C++中,编译有点不同(不仅仅是即时编译),但它也有一个链接器。因此,我猜这个过程可能类似于Java。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4270950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档