我偶然发现了以下代码
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 类中的静态块并打印“In Sub”,但令我惊讶的是它没有。虽然变量 ID 对 Super 类的 Sub 类是可见的,因为我们使用 Sub 类引用变量,但我希望它首先被加载。如果它被加载,那么静态块应该被执行。
既然它没有被打印出来,是不是根本没有加载 Sub 类?当我在代码中明确引用它时,这怎么可能。我的意思是如何在不加载到内存的情况下识别一个类?我错过了什么?