class A{
public final static int num = 0;
public final static B instance = null;
}
我听说类成员首先被初始化。那么在这段代码中,首先初始化的是什么,Java有初始化变量的顺序吗?
提前致谢。
class A{
public final static int num = 0;
public final static B instance = null;
}
我听说类成员首先被初始化。那么在这段代码中,首先初始化的是什么,Java有初始化变量的顺序吗?
提前致谢。
我不知道你从哪里听到的,但我相信它们是按照它们的写入顺序初始化的。检查 文档
接下来,按文本顺序执行类的类变量初始化程序和静态初始化程序,或者接口的字段初始化程序 ,就好像它们是一个块一样。
它们将按照您在代码中编写它们的顺序进行初始化。第一个 int 将被初始化,然后是 B
public final static int num = 0;
public final static B instance = null;
这两个陈述都涉及 JVM 方面的同等/同等努力。第二条语句只是创建一个空引用,而不是一个实际的新对象。引用通常是一个(32/64 位)值,具体取决于 VM 和平台。所以,我想说JVM会按照它们出现的顺序执行它们。
§12.4.2 JLS:
初始化 C 的过程如下:
然后,初始化最终类变量和接口字段,其值为编译时常量表达式(§8.3.2.1、§9.3.1、§13.4.9、§15.28)。
接下来,按照文本顺序执行类的类变量初始化程序和静态初始化程序,或者接口的字段初始化程序,就好像它们是一个单独的块一样。
这两个变量都是静态变量,因此它们基本上是类变量,并且是在加载类时创建的。
类加载是立即发生的,因此没有先创建哪个类。JVM只是一一创建,可能是按声明顺序。num
和都是instance
一组 32 位/64 位数据;唯一不同的是num
数值为 0;而实例是值是一个地址。