考虑一下:
Class A
{
private static B b = new B();
private static C c;
static
{
c= new C();
}
}
b
的初始化?c
b
或c
的第一次初始化会发生什么?
如果存在,请向我提供有关此问题的java文档的参考。 由于
答案 0 :(得分:2)
类变量在类加载时in textual order, as though they were a single block初始化,因此b首先初始化然后是c,如step 9 of the Detailed Initialization Procedure defined in the Java Language Specification中所述。
答案 1 :(得分:0)
带有static修饰符的代码块表示类初始值设定项;如果没有static修饰符,代码块就是一个实例初始值设定项。
静态初始化程序按照它们被定义的顺序执行(自上而下,就像简单的变量初始化程序一样)在加载类时(实际上,当它被解析时,但这是技术性的。)
实例初始化程序在实例化时定义的顺序执行,紧接在执行构造函数代码之前,在超级构造函数的调用之后立即执行。