【发布时间】:2011-03-21 08:36:20
【问题描述】:
我正在阅读this 文章,它说:
如果我们有两个由这些 CustomClassLoader 加载的 Student 类的实例,比如 student1 和 student2,那么 student1 和 student2 不是类型兼容的。换句话说,
学生 student3 = (学生) student2;
将抛出 ClassCastException,因为 JVM 将这两个视为独立的、不同的类类型,因为它们是由不同的 ClassLoader 实例定义的。
现在我明白了它想要传达的意思:如果我们使用两个不同的类加载器加载同一个类,那么它们将不兼容。到目前为止一切都很好。
但是它使用的例子让我很困惑,即
学生 student3 = (学生) student2;
难道不是当我们声明像 Student student 这样的引用变量时,编译器所寻找的只是这个 Studnet 是否存在在符合其包结构的适当位置。现在,当我们在运行时将此引用变量分配给一个真正加载的类时,我们使用哪个类加载器来加载所述类真的重要吗?我怀疑,因为根据我的理解,类加载器仅在我们执行“新建”或在其上调用静态字段时才起作用,而不是在我们简单地声明它的类型时。
请就此澄清一下,并帮助我纠正我在这方面的理解。
谢谢, 马维亚
【问题讨论】:
标签: java classloader