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