2010-05-25 18 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 
    } 
} 

मेरे पास एक त्वरित प्रश्न है। कोड ब्लॉक जो स्थैतिक कीवर्ड घोषणा के ठीक बाद शुरू होता है, वह किस प्रकार की विधि है? मैंने पहले कभी नहीं देखा है। अगर कोई मुझे प्रबुद्ध कर सकता है, तो इसकी सराहना की जाएगी। धन्यवाद।असामान्य "स्थैतिक" विधि घोषणा

उत्तर

16

यह एक विधि नहीं है, लेकिन एक वर्ग का एक स्थिर प्रारंभिक ब्लॉक है। आप Java Language Specification में इसके बारे में अधिक पढ़ सकते हैं।

कक्षा को लोड करने के बाद एक बार कोड को निष्पादित किया जाता है।

+1

+1: संक्षिप्त, आगे पढ़ने के लिए संदर्भ और स्पष्ट स्पष्टीकरण के साथ संक्षिप्त। यह सब कुछ है ... –

+0

त्वरित और सही प्रतिक्रिया के लिए धन्यवाद! – Jack

3

जैसा कि ग्राज़ोरोज सही ढंग से इंगित करता है, यह static initializer block है।

Here is another resourceवर्ग प्रारंभ और इन्स्टेन्शियशन के बीच का अंतर है, साथ ही जिस क्रम में वर्ग चर और स्थिर प्रारंभकर्ता ब्लॉक कहा जाता है समझा।

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

यह भी आरंभीकरण आदेश पता करने के लिए अच्छा है, मैं के रूप में:

इससे संबंधित एक अवधारणा है कि उदाहरण प्रारंभकर्ता ब्लॉक, काम double-brace initialization मुहावरा के लिए गुमनाम वर्गों के साथ एक साथ इस्तेमाल किया जा सकता है जो की है याद रखें कि इस क्रम में पहले स्थैतिक ब्लॉक की तुलना में स्थैतिक चर आता है। यह भी महत्वपूर्ण बिंदु है जब यह स्थिर ब्लॉक निष्पादित करता है - इसी वर्ग के पहले उल्लेख पर, कक्षा उदाहरण निर्माण पर नहीं।

संबंधित मुद्दे