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
char
String
- 任意の
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
。値を書き込むだけで十分です。