1
class A{
public final static int num = 0;
public final static B instance = null;
}

我听说类成员首先被初始化。那么在这段代码中,首先初始化的是什么,Java有初始化变量的顺序吗?

提前致谢。

4

4 回答 4

2

我不知道你从哪里听到的,但我相信它们是按照它们的写入顺序初始化的。检查 文档

接下来,按文本顺序执行类的类变量初始化程序和静态初始化程序,或者接口的字段初始化程序 ,就好像它们是一个块一样。

于 2013-09-10T09:16:57.110 回答
1

它们将按照您在代码中编写它们的顺序进行初始化。第一个 int 将被初始化,然后是 B

于 2013-09-10T09:17:50.280 回答
1
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)。

接下来,按照文本顺序执行类的类变量初始化程序和静态初始化程序,或者接口的字段初始化程序,就好像它们是一个单独的块一样。

于 2013-09-10T09:18:22.073 回答
1

这两个变量都是静态变量,因此它们基本上是类变量,并且是在加载类时创建的。

类加载是立即发生的,因此没有先创建哪个类。JVM只是一一创建,可能是按声明顺序。num和都是instance一组 32 位/64 位数据;唯一不同的是num数值为 0;而实例是值是一个地址。

于 2013-09-10T09:23:49.990 回答