"当一个类加载时"实际意味着什么?

whi*_*hat 16 java static-block classloader

据说java中的静态块只在加载该类时运行一次.但它究竟意味着什么?在哪一点上是由JVM(Java虚拟机)加载的类?

是在调用该类中的main方法时?并且当main方法开始执行时,是否还加载了同一类的所有超类?

考虑A扩展B和B扩展C.所有都有静态块.如果A有main方法,那么静态块的执行顺序是什么?

Mat*_*Mat 10

这在JLS 的执行部分中描述.即:

类的初始化包括执行其静态初始化程序和类中声明的静态字段的初始化程序.接口的初始化包括为接口中声明的字段执行初始值设定项.
在初始化类之前,必须初始化其直接超类,但不需要初始化类实现的接口.同样,在初始化接口之前,不需要初始化接口的超接口.

因此,在您的示例中,"topmost"类(C)的静态块首先运行,然后运行最后一个运行的类B.

有关加载类的所有步骤的详细说明,请参阅该文档.

(类在首次使用时会被加载.)