B类应加载与加载A类(proof-link)相同的ClassLoader。
class A {
B fld = new B();
void f() {
B loc_var = new B();
{
}
但是会发生什么事,如果B类之前已经被其他类加载器加载过?
任何类仅加载一次。但是,由不同的clas-loader加载的类是不同的类。
那么 B类将由A类的类加载器再加载一次,并且两个不同的(!)类将共存(在同一JVM实例中)?
答案 0 :(得分:1)
这取决于这两个ClassLoader的类型。 JVM具有三种:引导类加载器,扩展类加载器和应用程序类加载器。查找类时,首先,JVM将在Bootstrap ClassLoader中查找,然后在Extension和Application中查找。因此,如果两个ClassLoader是不同的类型,则Class将仅加载一次。如果两个ClassLoader都是Application ClassLoader,它将加载两次。使用哪个类,取决于调用者的ClassLoader。