我偶然发现了以下代码
class Super {
static String ID = "QBANK";
}
class Sub extends Super {
static {
System.out.print("In Sub");
}
}
public class Test{
public static void main(String[] args){
System.out.println(Sub.ID);
}
}
我们将Sub
作为Sub.id
引用。所以我希望在Sub类中执行静态块并且"在Sub"打印但令我惊讶它不。虽然变量ID对于Super类的Sub类是可见的,因为我们使用Sub类引用变量,我希望它首先被加载。如果它被加载,那么静态块应该被执行。
因为它没有被打印,所以Sub类根本没有被加载?当我在代码中明确引用它时,这怎么可能呢?我的意思是如何在不加载到内存中的情况下识别类?我错过了什么?