Java 关于编译时和运行时依赖关系及其解决方案的问题?
我有以下问题:Java 关于编译时和运行时依赖关系及其解决方案的问题?,java,compiler-construction,javac,Java,Compiler Construction,Javac,我有以下问题: 一般来说:什么是编译时和运行时依赖关系 javac编译器如何进行编译时依赖项解析 VM如何执行运行时依赖项解析 我浏览了JLS和JVM中的“依赖性”,但没有找到任何东西。“依赖性”是比JVM更高级别的抽象。有很多依赖关系管理系统,比如和,但它们都运行在JVM之上,而不是作为JVM本身的一部分 在Java平台文档中可以找到“链接”;i、 例如,JVM如何使用类或接口的名称来定位加载程序其他部分所需的字节码。Java通过一种称为。类路径可以通过环境变量、构建系统或运行程序时的命令行进
javac
编译器如何进行编译时依赖项解析- 编译时依赖关系:编译工件需要
类路径中的依赖关系。它们的产生是因为您对代码中硬编码的依赖项有某种“引用”,例如为某个类调用
,扩展或实现某些内容(直接或间接),或者使用直接new
符号进行方法调用reference.method()
- 运行时依赖项:运行工件需要
类路径中的依赖项。它们的产生是因为您执行访问依赖项的代码(以硬编码方式或通过反射或其他方式)
// in class A
F x = new F(42);
将加载类F
如果找不到该类,则会出现ClassNotFoundException。如果您在编译A
和执行之间更改了F类,并删除了F(int)
构造函数,则会出现几个不同的异常