我正在从这个页面阅读 Java 中的枚举示例。
在第一个示例中,我唯一不明白的static
部分是这部分代码中关键字的使用:
private static final List<Card> protoDeck = new ArrayList<Card>();
// Initialize prototype deck
static {
for (Suit suit : Suit.values())
for (Rank rank : Rank.values())
protoDeck.add(new Card(rank, suit));
}
public static ArrayList<Card> newDeck() {
return new ArrayList<Card>(protoDeck); // Return copy of prototype deck
}
为什么要声明 protoDeckstatic
和final
?之后,使用静态循环来初始化 protoDeck。我知道静态变量在对象实例之间保留它们的值。但这是一个单例类(私有构造函数),所以不能实例化。
那么像上面那样做有什么好处呢?如果 proteDeck 不是static
并且会有什么影响final
?