我试图将JVM中的初始化和实例化过程拼凑在一起,但JLS对一些细节有点迟钝,所以如果有人想清除一些细节,我们将不胜感激.这是我迄今为止能够弄清楚的.
初始化
递归初始化类的静态最终变量及其作为编译时常量的接口.
退出以文本顺序处理静态块和静态字段的递归.
实例化
递归初始化作为编译时常量的类的最终实例变量.
退出递归处理文本顺序中的非静态块和实例字段,在返回时将它们预先添加到构造函数中.
好的,现在提问.
是按声明顺序处理的接口?
是在单独的递归堆栈中处理的接口?
a)如果是,是否在超类之前或之后处理接口?
b)如果是,我在推断其中一个或其他(接口或超类)在其他编译时常量之前初始化其非编译时常量字段时是正确的.
调用非默认的super()构造函数在此过程中起什么作用?
我的任何结论都错了吗?
我错过了其他任何关键细节吗?
java ×1