Java类动态加载过程

时间:2014-02-11 09:26:36

标签: java jvm

我和我的教授有争执,我似乎无法在谷歌中找到答案...... 我的问题是,当我使用另一个类中的方法时,JVM会尝试找到类的.class文件吗?并且参数是这样的:如果找不到.class文件,那么将搜索源文件,如果发现它将被重新编译或者是否会抛出异常? 谢谢!

更新:我改述了这个问题,我将非常感谢你的帮助!

3 个答案:

答案 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文件)