Java 类加载与类初始化

Java 类加载与类初始化,java,jvm,jls,Java,Jvm,Jls,我一直认为类加载和类初始化是同义的,并且通常在需要时发生,当在中使用正在初始化/加载的类时。但现在我知道我的信念是错误的 请注意下面的内容,它清楚地表明类加载和初始化是两种不同的机制 作为补充,请注意类加载和 类初始化:只有后者的出现是精确的 由JLS指定。类加载可以随时发生 但是有人能解释一下Java语言中类加载和类初始化之间的区别吗。通常直觉说初始化应该总是在加载之前进行,但我完全错了。在没有加载类的情况下是否可以进行初始化?从中,您可以找到以下信息(我的): 5.5。初始化 初始化之前,必

我一直认为类加载和类初始化是同义的,并且通常在需要时发生,当在中使用正在初始化/加载的类时。但现在我知道我的信念是错误的

请注意下面的内容,它清楚地表明类加载和初始化是两种不同的机制

作为补充,请注意类加载和 类初始化:只有后者的出现是精确的 由JLS指定。类加载可以随时发生

但是有人能解释一下Java语言中类加载和类初始化之间的区别吗。通常直觉说初始化应该总是在加载之前进行,但我完全错了。在没有加载类的情况下是否可以进行初始化?

从中,您可以找到以下信息(我的):

5.5。初始化

初始化之前,必须链接类或接口,即验证、准备和可选地解析

返回链接部分

5.4。连接

链接一个类或接口需要验证和准备该类或接口、它的直接超类、它的直接超接口以及它的元素类型(如果是数组类型的话)。类或接口中符号引用的解析是链接的可选部分。本规范允许在链接活动(以及由于递归,加载)发生时实现灵活性,前提是维护以下所有属性

  • 类或接口在链接之前已完全加载

因此,我们可以推断,类或接口在初始化之前必须加载

特别是12.2和12.4。此外,“类或接口中
符号引用的解析是链接的可选部分。”您能解释一下吗?