【发布时间】:2014-03-18 09:06:48
【问题描述】:
我有以下问题:
- 一般来说:什么是编译和运行时依赖项
-
javac编译器如何进行编译时依赖关系解析 - VM 如何解决运行时依赖关系
我已经浏览了 JLS 和 JVMS 的“依赖”,但没有提出任何建议。
【问题讨论】:
标签: java compiler-construction javac
我有以下问题:
javac 编译器如何进行编译时依赖关系解析我已经浏览了 JLS 和 JVMS 的“依赖”,但没有提出任何建议。
【问题讨论】:
标签: java compiler-construction javac
一般来说:什么是编译和运行时依赖项
编译时依赖项:您需要 CLASSPATH 中的依赖项来编译您的工件。它们的产生是因为您对代码中硬编码的依赖项有某种“引用”,例如为某个类调用 new,扩展或实现某些东西(直接或间接),或者使用直接 @987654325 的方法调用@ 表示法。
运行时依赖项:您需要 CLASSPATH 中的依赖项来运行您的工件。它们的产生是因为您执行访问依赖项的代码(以硬编码方式或通过反射或其他方式)。
取自:Compile time vs Run time Dependency - Java 然而,much detailed reference is available on Jenkov's website
javac 编译器如何进行编译时依赖解析
它会查看您的类路径和源路径以找到必要的依赖项。
VM 如何进行运行时依赖解析
JVM 并不完全关心依赖解析,AFAIK。 JVM 所做的是在需要时从类路径加载类。 例如,当你的程序(比如 A 类)第一次命中时:
// in class A
F x = new F(42);
F 类将被加载。
如果未找到该类,则会收到 ClassNotFoundException。如果您在 A 的编译和执行之间更改了 F 类,并删除了例如 F(int) 构造函数,那么您会得到几个不同的丑陋异常。
【讨论】: