我和我的教授有争执,我似乎无法在谷歌中找到答案...... 我的问题是,当我使用另一个类中的方法时,JVM会尝试找到类的.class文件吗?并且参数是这样的:如果找不到.class文件,那么将搜索源文件,如果发现它将被重新编译或者是否会抛出异常? 谢谢!
更新:我改述了这个问题,我将非常感谢你的帮助!
答案 0 :(得分:2)
根本不是标准行为,并且无法在正常环境中运行。
但是,我听说过一些能够做到这一点的商业应用程序服务器发行版...有人告诉我有关在开发模式下配置的旧weblogic版本,但可能只是一个都市传奇:P
我想你可以编写一个在类路径中查找.java文件的调优类加载器,并且如果它在带有java编译器的JDK上运行,那就按照你说的做。
答案 1 :(得分:1)
标准JRE甚至不包含Java源代码的编译器。要编译Java源代码,您需要一个包含自己的Java编译器的JDK或IDE。如果使用javac
或IDE的内置编译器编译源代码,这些编译器将搜索引用类的源文件,并在未找到.class
文件或源文件时编译它们比类文件新。但如果你,例如之后删除引用类的类文件并运行程序,JVM将不会搜索源文件。它将抛出NoClassDefFoundError
。
答案 2 :(得分:0)
JVM不会搜索我们尝试调用其方法的类的源文件。 JVM会抛出一个异常,如:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Employee cannot be resolved to a type
Employee cannot be resolved to a type
at com.test.TestIt.main(TestIt.java:7)
Employee是我们想要调用其方法的类(不为Employee创建.class文件)