The JavaTM Tutorial

| Start of Tutorial > Start of Trail > Start of Lesson | Search Feedback Form

Trail: Learning the Java Language
Lesson: Language Basics

## The switch Statement

> Use the switch statement to conditionally perform statements based on an integer expression. Following is a sample program, `SwitchDemo`, that declares an integer named `month` whose value supposedly represents the month in a date. The program displays the name of the month based on the value of `month` using the `switch` statement:

> >     public class SwitchDemo {
> >         public static void main(String[] args) {

> >             int month = 8;
> >             switch (month) {
> >                 case 1:  System.out.println("January"); break;
> >                 case 2:  System.out.println("February"); break;
> >                 case 3:  System.out.println("March"); break;
> >                 case 4:  System.out.println("April"); break;
> >                 case 5:  System.out.println("May"); break;
> >                 case 6:  System.out.println("June"); break;
> >                 case 7:  System.out.println("July"); break;
> >                 case 8:  System.out.println("August"); break;
> >                 case 9:  System.out.println("September"); break;
> >                 case 10: System.out.println("October"); break;
> >                 case 11: System.out.println("November"); break;
> >                 case 12: System.out.println("December"); break;
> >             }
> >         }
> >     }

> The `switch` statement evaluates its expression, in this case, the value of `month`, and executes the appropriate case statement. Thus the output of the program is: `August`. Of course, you could implement this as an `if` statement:

> >     int month;
> >     . . .
> >     if (month == 1) {
> >         System.out.println("January");
> >     } else if (month == 2) {
> >         System.out.println("February");
> >     . . .
> >     // and so on
> >     . . .

> Deciding whether to use an `if` statement or a `switch` statement is a judgment call. You can decide which to use based on readability and other factors. An `if` statement can be used to make decisions based on ranges of values or conditions, whereas a `switch` statement can make decisions based only on a single integer value. Also, the value provided to each `case` statement must be unique.

> Another point of interest in the `switch` statement are the break statements after each `case`. The `break` statements terminates the `switch` statement and flow of control continues with the first statement following the `switch`. The `break` statements are necessary because `case` statements fall through. That is, without an explicit `break` control will flow sequentially through subsequent `case` statements. Following is an example, `SwitchDemo2`, which illustrates why it might be useful to have `case` statements fall through;

> >     public class SwitchDemo2 {
> >         public static void main(String[] args) {

> >             int month = 2;
> >             int year = 2000;
> >             int numDays = 0;

> >             switch (month) {
> >                 case 1:
> >                 case 3:
> >                 case 5:
> >                 case 7:
> >                 case 8:
> >                 case 10:
> >                 case 12:
> >                     numDays = 31;
> >                     break;
> >                 case 4:
> >                 case 6:
> >                 case 9:
> >                 case 11:
> >                     numDays = 30;
> >                     break;
> >                 case 2:
> >                     if ( ((year % 4 == 0) && !(year % 100 == 0))
> >                          || (year % 400 == 0) )
> >                         numDays = 29;
> >                     else
> >                         numDays = 28;
> >                     break;
> >             }
> >             System.out.println("Number of Days = " + numDays);
> >         }
> >     }

> The output from this program is:

> >     Number of Days = 29

> Technically, the final `break` is not required because flow would fall out of the `switch` statement anyway. However, we recommend using a `break` for the last `case` statement just in case you need to add more `case` statements at a later date. This makes modifying the code easier and less error-prone.

> You will see `break` used to terminate loops in Branching Statements.

> Finally, you can use the default statement at the end of the `switch` to handle all values that aren't explicitly handled by one of the `case` statements.

> >     int month = 8;
> >     . . .
> >     switch (month) {
> >         case 1:  System.out.println("January"); break;
> >         case 2:  System.out.println("February"); break;
> >         case 3:  System.out.println("March"); break;
> >         case 4:  System.out.println("April"); break;
> >         case 5:  System.out.println("May"); break;
> >         case 6:  System.out.println("June"); break;
> >         case 7:  System.out.println("July"); break;
> >         case 8:  System.out.println("August"); break;
> >         case 9:  System.out.println("September"); break;
> >         case 10: System.out.println("October"); break;
> >         case 11: System.out.println("November"); break;
> >         case 12: System.out.println("December"); break;
> >         default: System.out.println("Hey, that's not a valid month!");
> >             break;
> >     }

| Start of Tutorial > Start of Trail > Start of Lesson | Search Feedback Form