Java初始化和实例化的顺序

12 浏览
0 Comments

Java初始化和实例化的顺序

我正在试图整理JVM中的初始化和实例化过程,但是JLS在一些细节上有点晦涩,所以如果有人能解答一些细节,我将不胜感激。目前我已经弄清了以下内容。

初始化:

1. 递归地初始化类及其接口中的静态final变量,这些变量是编译时常量。

2. 递归过程中按文本顺序处理静态代码块和静态字段。

实例化:

1. 递归地初始化类中的final实例变量,这些变量是编译时常量。

2. 递归过程中按文本顺序处理非静态代码块和实例字段,并将它们添加到构造函数的返回值之前。

好了,现在是问题时间。

1. 接口是否按照声明顺序进行处理?

2. 接口是否在一个单独的递归堆栈中进行处理?

a) 如果是,接口是在超类之前还是之后进行处理?

b) 如果是,我是否可以得出结论,一个接口或超类(接口或超类之一)在另一个之前初始化其非编译时常量字段。

3. 非默认super()构造函数在此过程中扮演什么角色?

4. 我的结论中是否有错误?

5. 我是否遗漏了其他重要细节?

0