因爲是static final
,所以它必須在一次靜態上下文被初始化 - 當變量被聲明或在static initialization block。
static {
name = "User";
}
編輯:靜態成員屬於類,和非靜態成員屬於該類的每個實例。如果要在實例塊中初始化一個靜態變量,那麼每次創建該類的新實例時都會初始化它。這意味着它在此之前不會被初始化,並且可以被初始化多次。由於它是static
和final
,它必須初始化一次(對於該類,對於每個實例不是一次),因此您的實例塊將不會執行。
也許你想在Java中研究更多關於static vs. non-static variables的內容。
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
將工作作爲創建的實例數的計數器,因爲它是static
,並在非靜態實例塊遞增。
也許你的意思是「怎麼做」,而不是原因。除非你對語言語法和設計背後的哲學有疑問。 – 2015-03-30 18:46:47