gpt4 book ai didi

java - 编译时间与运行时间依赖关系 - Java

转载 作者:IT老高 更新时间:2023-10-28 11:48:08 27 4
gpt4 key购买 nike

Java 中的编译时依赖和运行时依赖有什么区别?和类路径有关,但是它们有什么区别呢?

最佳答案

  • 编译时依赖项:您需要 CLASSPATH 中的依赖项来编译您的工件。它们的产生是因为您对代码中硬编码的依赖项有某种“引用”,例如为某个类调用 new、扩展或实现某些东西(直接或间接)或方法调用使用直接 reference.method() 表示法。

  • 运行时依赖项:您需要 CLASSPATH 中的依赖项来运行您的工件。它们的产生是因为您执行访问依赖项的代码(以硬编码方式或通过反射或其他方式)。

虽然编译时依赖通常意味着运行时依赖,但您也可以只拥有编译时依赖。这是基于 Java 仅在第一次访问该类时链接类依赖项的事实,因此如果您在运行时从不访问特定类,因为代码路径从未被遍历,Java 将忽略该类及其依赖项。

这个例子

在 C.java 中(生成 C.class):

package dependencies;
public class C { }

在A.java中(生成A.class):

package dependencies;
public class A {
public static class B {
public String toString() {
C c = new C();
return c.toString();
}
}
public static void main(String[] args) {
if (args.length > 0) {
B b = new B();
System.out.println(b.toString());
}
}
}

在这种情况下,A 通过 BC 有编译时依赖,但它只会有运行时依赖如果在执行 java dependencies.A 时传递一些参数,则在 C 上,因为 JVM 只会尝试解决 BC 的依赖它开始执行B b = new B()。此功能允许您在运行时仅提供您在代码路径中使用的类的依赖关系,而忽略工件中其余类的依赖关系。

关于java - 编译时间与运行时间依赖关系 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4270950/

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