1. De meerkeuze-operator:switch

Java heeft nog een interessante operator die het heeft geërfd van zijn grootvader (C++). We hebben het over de switchverklaring. We zouden het ook een meerkeuze-operator kunnen noemen. Het ziet er een beetje omslachtig uit:

switch(expression)
{
   case value1: code1;
   case value2: code2;
   case value3: code3;
}

Een uitdrukking of variabele wordt tussen haakjes aangegeven. Als de waarde van de expressie is value1, begint de Java-machine met uitvoeren code1. Als de uitdrukking gelijk is aan value2, springt de uitvoering naar code2. Als de uitdrukking gelijk is aan value3, dan code3wordt uitgevoerd.

Voorbeeld:

Code Console-uitvoer
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
}
High

2. breakverklaring binnenswitch

Een belangrijk kenmerk van een switchinstructie is dat het programma gewoon naar de vereiste regel springt (naar het vereiste codeblok) en vervolgens alle codeblokken uitvoert tot het einde van het switch. Niet alleen het codeblok dat overeenkomt met de waarde in de switch, maar alle codeblokken tot het einde van de switch.

Voorbeeld:

Code Console-uitvoer
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
}
Low
Normal
High

Gegeven een temperatuur van 36, zal het programma de switchinstructie invoeren, naar het eerste codeblok springen en het uitvoeren (het eerste geval), en dan opgewekt de rest van de codeblokken uitvoeren.

Als u slechts één codeblok wilt uitvoeren - het codeblok dat is gekoppeld aan het overeenkomende hoofdlettergebruik - dan moet u het blok beëindigen met een breakinstructie;

Voorbeeld:

Code Console-uitvoer
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
}
Low

breakU kunt de in het laatste geval van de instructie weglaten switch, aangezien dat blok de laatste is met of zonder break-instructie.


3. Standaardactie:default

Nog een belangrijk punt. Wat gebeurt er als geen van de in de lijst vermelde gevallen switchovereenkomt met de uitdrukking tussen haakjes?

Als er geen overeenkomende naamval wordt gevonden, wordt de rest van de switchinstructie overgeslagen en gaat het programma door met uitvoeren nadat de accolade de switchinstructie beëindigt.

Dat gezegd hebbende, je kunt een switchstatement ook laten gedragen als de else-tak in een if-elsestatement. Gebruik hiervoor het defaulttrefwoord.

Als geen van de cases in het switchblok overeenkomt met de waarde van de uitdrukking en het switcheen blok heeft default, wordt het standaardblok uitgevoerd. Voorbeeld:

Code Console-uitvoer
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
Call an ambulance

4. Vergelijken switchenif-else

De switchverklaring lijkt enigszins op een if-elseverklaring, alleen ingewikkelder.

U kunt de code van een statement altijd herschrijven switchals meerdere ifstatements. Voorbeeld:

Coderen met schakelaar Codeer met if-else
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Low");
}
else if (temperature == 37)
{
   System.out.println("Normal");
}
else if (temperature == 38)
{
   System.out.println("High");
}
else
{
   System.out.println("Call an ambulance");
}

De code aan de linkerkant werkt precies hetzelfde als de code aan de rechterkant.

Een keten van meerdere if-elsestatements heeft de voorkeur wanneer een ifstatement verschillende complexe uitdrukkingen bevat in elk afzonderlijk geval.



5. Welke uitdrukkingen kunnen in een switchverklaring worden gebruikt?

caseNiet alle typen kunnen als labels in een verklaring worden gebruikt switch. U kunt literalen van de volgende typen gebruiken:

  • typen gehele getallen: byte, short, int,long
  • char
  • String
  • elk enumtype

U kunt geen andere typen als doosetiketten gebruiken.

Voorbeeld van het gebruik van een enuminside switchstatement:

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}

Opmerking: als u een enuminside- switchstatement gebruikt, hoeft u de klassenaam niet voor elke waarde in de caselabels te schrijven. Het is voldoende om alleen de waarde op te schrijven.