2010-05-25 19 views
6
public class Card { 

    public enum Rank { DEUCE, THREE, FOUR, FIVE, SIX, 
     SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE } 

    public enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES } 

    private final Rank rank; 
    private final Suit suit; 
    private Card(Rank rank, Suit suit) { 
     this.rank = rank; 
     this.suit = suit; 
    } 

    public Rank rank() { return rank; } 
    public Suit suit() { return suit; } 
    public String toString() { return rank + " of " + suit; } 

    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 
    } 
} 

Hızlı bir sorum var. Statik anahtar kelime beyanından hemen sonra başlayan kod bloğu, bu tür bir yöntem nedir? Bunu daha önce hiç görmedim. Eğer kimse beni aydınlatırsa, bu çok takdir edilecektir. Teşekkürler.Olağandışı "statik" yöntem bildirimi

cevap

16

Bu, bir yöntem değil, bir sınıfın statik Initializer bloğu değil. Bu konuda daha fazlasını okuyabilirsin Java Language Specification.

İçindeki kod, sınıfı yükledikten sonra bir kez yürütülür.

+1

+1: Daha fazla okuma için referans ile açık ve açık bir açıklama. Bu ne hakkındadır ... –

+0

Hızlı ve mükemmel yanıt için teşekkürler! – Jack

3

Grzegorz'ın doğru olarak işaret ettiği gibi, static initializer block. sınıf başlatma ve örnekleme arasındaki fark, aynı zamanda sınıf değişkenleri ve statik başlatıcı blokları denilen sırayı açıklamak

Here is another resource.

private static final Set<String> VALID_CODES = new HashSet<String>() {{ 
    add("XZ13s"); 
    add("AB21/X"); 
    add("YYLEX"); 
    add("AR2D"); 
}}; 
0

O ben gibi, başlatma sırasını bilmek de iyidir:

İlgili bir konsept kullanışlı double-brace initialization deyim anonim sınıfları ile birlikte kullanılabilir örneği başlatıcı blokların ait olduğunu Bu sırada ilk olarak hatırla, statik bloktan statik değişkenler geliyor. Aynı zamanda önemli nokta, bu statik bloğun yürütüldüğü zamandır - sınıfın oluşturulmasında değil, karşılık gelen sınıfın ilk bahsinde.

İlgili konular