Dúvida com sintaxe

galera… eu nunca tinha visto essa sintaxe:

static {
     for (Suit suit : Suit.values())
          for (Rank rank : Rank.values())
               protoDeck.add(new Card(rank, suit));
}

eis o contexto:

import java.util.*;

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

tirado daqui

do que se trata???

[]'s

Em português:

para cada suit na enum Suit {
    para cada rank na enum Rank {
        protoDeck.add (new Card (rank, suit));
    }
}}

Seria mais ou menos equivalente a: (se você pudesse incrementar uma enum: - o que vou escrever não é Java válido)

for (Suit suit = CLUBS; suit <= SPADES; ++suit) {
    for (Rank rank = DEUCE; rank <= ACE; ++rank) {
...

thingol, me perdoe… não fui muito claro na pergunta… :lol:

minha dúvida é com relação à esse static sozinho, aí :

static {

}

como é que quando isso ocorre:

return new ArrayList<Card>(protoDeck);

ele sabe que tem que entrar no loop?

[]'s

Você usa o “static” sozinho quando quer inicializar membros estáticos de sua classe, e precisa de algo mais complicado que uma simples expressão. Por exemplo, você precisasse fazer uma inicialização que requer um “try/catch” ou um loop.
O exemplo a seguir dá o caso mais simples.

class Teste {
    static int x = 10; // declarei e inicializei a variável estática
}

é a mesma coisa que isto (o compilador gera os mesmos bytecodes):

class Teste {
    static int x; // note que não atribuí valor nenhum ainda!
    static {
        x = 10; // agora é que inicializamos a variável estática
    }
}
1 curtida

Ahhhhhhhhhhhhhh tahhhhh… :smiley:

agora ficou claro… nossa… dessa eu não sabia… isso sempre existiu? :XD:

obrigado!

:thumbup:

Isso é coisa do Java 1.0.

caraca!!! :mrgreen:

nunca tinha visto isso antes… de mais de 2 anos que conheço Java

mais uma vez obrigado!