缺少依赖项时的对象实例化(Java)

时间:2011-04-27 17:03:41

标签: java object instantiation classloader

伙计们,任何人都可以解释以下情况:

1)Web应用程序的module1.jar目录中包含lib。该模块中有一个类A

package module1;
import module2.B;
public interface IA {   
    void methodOk() {}

    void methodWithB(B param) {}
}

package module1;
import module2.B;
public class A implements IA {
    public A() {}

    //...
void methodWithB(B param) {
    //do job on B
}
}

2)module2.jar不存在 - 它不在类路径中。

3)应用程序能够创建类A的对象,尽管它缺少依赖项。在应用程序中,调用方法A.methodOk()。

如果您可以参考任何关于此的规范,那将会很酷。 非常感谢。

3 个答案:

答案 0 :(得分:3)

由于代码已经编译,因此在您直接使用类B之前不会抛出错误。从代码的外观来看,实际上并没有使用B的实例。

答案 1 :(得分:2)

如果B在任何地方都没有使用,那么生成的字节码将没有对module2.B的引用,因此它会被编译掉。在这种情况下,编译时没有依赖项之外。

如果问题不明确且B 在A某处使用,那么我有兴趣看到更多代码来尝试确定发生了什么。

答案 2 :(得分:1)

从类加载器的角度来看它。如果您不必加载该类,则不关心该类的字节码是否丢失。

你的问题是,“什么触发了类加载?”

我能想到的两个原因是: - 施工 - 静态访问