Tipos de Dados Suportados
A expressão switch tem uma variável alvo que não está habilitada até o programa esteja em tempo de execução. Antes do Java 5, essa variável poderia apenas ser um valor int ou aqueles valores que poderiam ser promovidos para int, especificamente byte, short, char ou int.
Quando enum foi adicionado no Java 5, foi adicionado ao switch o suporte para valores enum. No Java 7, a declaração switch foi além e permitiu os valores String. Finalmente, a declaração switch também suporta qualquer classe numérica empacotada, tais como Byte, Short, Character ou Integer.
Os tipos de dados suportados são:
- byte e Byte
- short e Short
- char e Character
- int e Integer
- String
- Valores enum
Veja que o boolean e long tem tipos empacotados, mas não são suportados pela declaração switch.
Valores Constantes em Tempo de Compilação
Os valores para cada declaração case precisa ser uma constante em tempo de compilação de mesmo tipo de dado que o valor do switch. Isso significa que você pode apenas utilizar literals, constantes enum ou constantes final do mesmo tipo de dado.
A constante final, significa que a variável precisa ser marcada com o modificador final e inicializada com um valor literal dentro da mesma expressão na qual foi declarada.
Vamos ver um exemplo utilizando o dia da semana, onde 0 é Domingo, 1 é Segunda, e assim por diante:
1 2 3 4 5 6 7 8 9 10 11 12 |
int diasDaSemana = 5; switch(diasDaSemana) { default: System.out.println(“Dias da Semana”); break; case 0: System.out.println(“Domingo”); break; case 6: System.out.println(“Sábado”); break; } |
Com o valor 5 a saída do programa será:
Dias da Semana.
A primeira coisa que notamos é que há uma declaração break no fim de cada case e uma seção default. Nós iremos ver a declaração break em detalhes quando chegarmos no assunto dos loops, mas por enquanto sabia que ele encerra a declaração switch e retorna o valor correspondente do escopo que o break se encontra. Se o break não for utilizado a execução do switch irá executar até o bloco default.
Outra coisa para prestar atenção é que o bloco default não está no fim do escopo do switch. O default não tem um lugar específico para ficar. Veja o exemplo a seguir:
1 2 3 4 5 6 7 8 9 10 |
int diasDaSemana = 5; switch(diasDaSemana) { case 0: System.out.println(“Domingo”); default: System.out.println(“Dias de Semana”); case 6: System.out.println(“Sábado”); break; } |
Esse código parece com o anterior a esse, exceto por duas declarações break que foram removidas e a ordem foi modificada. Isso significa que o valor dado ao DiasDaSemana, 5, poderá pular para o bloco default e executará até encontrar a declaração break ou terminar a estrutura:
A saída será:
Dias da Semana
Sábado
A ordem da declaração case e default é importante desde que o default termine a switch com apenas uma saída. Se o valor do diasDaSemana for 6, o bloco default será executado? A saída será a seguinte:
Sábado
Mesmo que o bloco default esteja antes do bloco case, apenas o bloco case foi executado. Lembrando da definição do bloco default: só será executado o default se nenhum valor verificado for igual a nenhum case, não importando a posição.
Se o valor da variável diasDaSemana for 0, todas as três declarações serão executadas:
Domingo
Dias da Semana
Sábado
Acesse o link para ver mais um exemplo.
Fonte: OCA – Oracle Certified Associate Java SE 8 Programmer I – Study Guide
Deixe um comentário