因为它是静态final,所以它必须在静态上下文中初始化一次 – 声明变量时或在
static initialization block中.
static {
name = "User";
}
编辑:静态成员属于该类,非静态成员属于该类的每个实例.如果要在实例块中初始化静态变量,则每次创建该类的新实例时都会初始化它.这意味着它在此之前不会被初始化,并且可以多次初始化.由于它是静态的和最终的,因此必须初始化一次(对于该类,而不是每个实例一次),因此您的实例块将不会.
EDIT2:以下是可能有助于您理解的示例.
class Test {
private static final int a;
private static int b;
private final int c;
private int c;
// runs once the class is loaded
static {
a = 0;
b = 0;
c = 0; // error: non-static variables c and d cannot be
d = 0; // referenced from a static context
}
// instance block, runs every time an instance is created
{
a = 0; // error: static and final cannot be initialized here
b = 0;
c = 0;
d = 0;
}
}
所有未注释的行都有效.如果我们有
// instance block
{
b++; // increment every time an instance is created
// ...
}
然后b将作为创建的实例数的计数器,因为它是静态的并且在非静态实例块中递增.