4

我偶然发现了以下代码

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);
    }
}

我们将类引用SubSub.id. 因此,我希望执行 Sub 类中的静态块并打印“In Sub”,但令我惊讶的是它没有。虽然变量 ID 对 Super 类的 Sub 类是可见的,因为我们使用 Sub 类引用变量,但我希望它首先被加载。如果它被加载,那么静态块应该被执行。

既然它没有被打印出来,是不是根本没有加载 Sub 类?当我在代码中明确引用它时,这怎么可能。我的意思是如何在不加载到内存的情况下识别一个类?我错过了什么?

4

0 回答 0