1. 多肢選択演算子:switch

Java には、grandpappy (C++) から継承したもう 1 つの興味深い演算子があります。私たちはその声明について話していますswitch。これを多肢選択演算子と呼ぶこともできます。少し面倒に見えます:
switch(expression)
{
case value1: code1;
case value2: code2;
case value3: code3;
}
式または変数は括弧内に示されます。式の値が の場合value1、Java マシンは実行を開始しますcode1。式が に等しい場合value2、実行は にジャンプしますcode2。式が に等しい場合value3、 がcode3実行されます。
例:
| コード | コンソール出力 |
|---|---|
|
|
2.breakでのステートメントswitch
ステートメントの重要な特徴switchは、プログラムが必要な行 (必要なコード ブロック) に単純にジャンプし、その後、 の終わりまですべてのコード ブロックを実行することですswitch。の値に対応するコード ブロックだけでなくswitch、 の終わりまでのすべてのコード ブロックswitch。
例:
| コード | コンソール出力 |
|---|---|
|
|
温度が 36 度の場合、プログラムはステートメントに入りswitch、最初のコード ブロックにジャンプして実行し (最初のケース)、その後残りのコード ブロックを順調に実行します。
1 つのコード ブロック (一致するケースに関連付けられたコード ブロック) だけを実行する場合は、そのブロックをステートメントで終了する必要がありますbreak。
例:
| コード | コンソール出力 |
|---|---|
|
|
そのブロックは、break ステートメントの有無にかかわらず最後のブロックであるため、ステートメントbreakの最後の場合は省略できます。switch
3. デフォルトのアクション:default
もう一つ重要な点があります。リストされているケースがswitch括弧内の式に一致しない場合はどうなりますか?
一致するケースが見つからない場合、switchステートメントの残りの部分はスキップされ、プログラムはステートメントを終了する中括弧の後に実行を続行しますswitch。
つまり、switchステートメントをステートメント内の else 分岐のように動作させることもできますif-else。これを行うには、defaultキーワードを使用します。
caseブロック内のいずれの もswitch式の値と一致せず、 にブロックswitchがある場合はdefault、デフォルトのブロックが実行されます。例:
| コード | コンソール出力 |
|---|---|
|
|
4. 比較switchとif-else
このswitchステートメントはステートメントに似ていますがif-else、より複雑であるだけです。
ステートメントのコードは、いつでもswitch複数のステートメントとして書き直すことができますif。例:
| スイッチ付きコード | if-else を使用したコード |
|---|---|
|
|
左側のコードは右側のコードとまったく同じように機能します。
ステートメントにさまざまな複雑な式がそれぞれ個別に含まれているif-else場合は、複数のステートメントを連鎖させることが推奨されます。if
5. ステートメントではどのような表現を使用できますかswitch?
caseすべての型をステートメント内のラベルとして使用できるわけではありませんswitch。次のタイプのリテラルを使用できます。
- 整数型:
byte、short、int、long charString- 任意の
enumタイプ
他のタイプをケースラベルとして使用することはできません。
enumステートメント内での使用例switch:
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;
}
enum注: ステートメント内で を使用する場合switch、ラベルの各値の前にクラス名を記述する必要はありませんcase。値を書き込むだけで十分です。
GO TO FULL VERSION