我有以下问题:
javac
编译器如何进行编译时依赖性解析我已经为JLS和JVMS浏览了“依赖”但没有提出任何建议。
答案 0 :(得分:1)
一般来说:什么是编译和运行时依赖
编译时依赖性:您需要CLASSPATH
中的依赖项来编译工件。生成它们是因为您对代码中的硬编码具有某种“引用”,例如为某些类调用new
,扩展或实现某些内容(直接或间接),或者使用直接调用方法调用reference.method()
符号。
运行时依赖性:您需要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)
构造函数,那么你会得到几个不同的丑陋例外。
答案 1 :(得分:0)