[JavaSE]:10、Javas witch case文

12468 ワード

Java switch case文
switch case文は一つの変数が一連の値のいずれかに等しいかを判断し、各値を一つの分岐と呼びます。
文法switch case文の文法形式は以下の通りです。
switch(expression){
    case value :
       //  
       break; //  
    case value :
       //  
       break; //  
    //         case  
    default : //  
       //  
}
switch case文には以下の規則があります。
  • switch文の変数タイプは、byte、shott、intまたはcharとすることができます。Java SE 7からスタートして、switchは文字列Stringタイプをサポートしています。同時にcaseラベルは文字列定数または字面量でなければなりません。
  • switch文は複数のcase文を持つことができる。各caseの後ろと一つを比較する値とコロン。
  • case文の値のデータタイプは、変数のデータタイプと同じでなければならず、定数または字面定数だけである。
  • 変数の値がcase文の値と等しい場合、case文の後の文はbreak文が現れてからswitch文が飛び出すまで実行を開始する。
  • break文に遭遇したら、switch文は終了します。プログラムをswitch文の後の文にジャンプして実行します。case文はbreak文を含まなくてはいけません。break文がない場合、プログラムはbreak文が出るまで、次のcase文を実行します。
  • switch文は、一般にswitch文の最後の分岐であるdefault分岐を含むことができます。defaultはcase文の値と変数値が等しい場合に実行します。default分岐にはbreak文は必要ありません。
  • switch case実行時には必ず先にマッチングし、現在のcaseの値をマッチングして返します。breakがあるかどうかによって、出力を継続するかどうか、または飛び出すかどうかを判断します。
    実例
    Test.javaファイルコード:
    public class Test {
       public static void main(String args[]){
          //char grade = args[0].charAt(0);
          char grade = 'C';
     
          switch(grade)
          {
             case 'A' :
                System.out.println("  "); 
                break;
             case 'B' :
             case 'C' :
                System.out.println("  ");
                break;
             case 'D' :
                System.out.println("  ");
                break;
             case 'F' :
                System.out.println("        ");
                break;
             default :
                System.out.println("    ");
          }
          System.out.println("      " + grade);
       }
    }
    
    以上のコードのコンパイルの結果は以下の通りです。
      
          C
    
    case文ブロックにbreak文がない場合、JVMは各caseに対応する戻り値を順次出力せず、マッチングが成功しない場合はデフォルトcaseに戻ります。Test.javaファイルコード:
    public class Test {
       public static void main(String args[]){
          int i = 5;
          switch(i){
             case 0:
                System.out.println("0");
             case 1:
                System.out.println("1");
             case 2:
                System.out.println("2");
             default:
                System.out.println("default");
          }
       }
    }
    
    以上のコードのコンパイルの結果は以下の通りです。
    default
    
    case文ブロックにbreak文がない場合、マッチングが成功したら、現在のcaseから、後続のすべてのcaseの値が出力されます。
    Test.javaファイルコード:
    public class Test {
       public static void main(String args[]){
          int i = 1;
          switch(i){
             case 0:
                System.out.println("0");
             case 1:
                System.out.println("1");
             case 2:
                System.out.println("2");
             default:
                System.out.println("default");
          }
       }
    }
    
    以上のコードのコンパイルの結果は以下の通りです。
    1
    2
    default
    
    現在のマッチングに成功したcase文のブロックにbreak文がない場合、現在のcaseから、後続のcaseの値が全部出力されます。もし後続のcase文のブロックにbreak文があると判断が飛び出します。
    Test.javaファイルコード:
    public class Test {
       public static void main(String args[]){
          int i = 1;
          switch(i){
             case 0:
                System.out.println("0");
             case 1:
                System.out.println("1");
             case 2:
                System.out.println("2");
             case 3:
                System.out.println("3"); break;
             default:
                System.out.println("default");
          }
       }
    }
    
    以上のコードのコンパイルの結果は以下の通りです。
    1
    2
    3