java 编译 依赖_编译时间vs运行时依赖关系 – Java

>编译时依赖:在CLASSPATH中需要依赖关系来编译工件。它们的产生是因为你对你的代码中硬编码的依赖有某种“引用”,例如为某些类调用new,扩展或实现某些东西(直接或间接),或使用direct 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对C到B有一个编译时依赖,但是如果你在执行java依赖时传递一些参数,它只对C有运行时依赖.A,因为JVM只会尝试解决B的依赖on C当它执行B b = new B()。此功能允许您在运行时只提供在代码路径中使用的类的依赖关系,并忽略工件中其余类的依赖关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值