Java初始化和实例化的顺序
- 论坛
- Java初始化和实例化的顺序
12 浏览
Java初始化和实例化的顺序
我正在试图整理JVM中的初始化和实例化过程,但是JLS在一些细节上有点晦涩,所以如果有人能解答一些细节,我将不胜感激。目前我已经弄清了以下内容。
初始化:
1. 递归地初始化类及其接口中的静态final变量,这些变量是编译时常量。
2. 递归过程中按文本顺序处理静态代码块和静态字段。
实例化:
1. 递归地初始化类中的final实例变量,这些变量是编译时常量。
2. 递归过程中按文本顺序处理非静态代码块和实例字段,并将它们添加到构造函数的返回值之前。
好了,现在是问题时间。
1. 接口是否按照声明顺序进行处理?
2. 接口是否在一个单独的递归堆栈中进行处理?
a) 如果是,接口是在超类之前还是之后进行处理?
b) 如果是,我是否可以得出结论,一个接口或超类(接口或超类之一)在另一个之前初始化其非编译时常量字段。
3. 非默认super()构造函数在此过程中扮演什么角色?
4. 我的结论中是否有错误?
5. 我是否遗漏了其他重要细节?