2016-05-31 4 views
-1

を発生させますラベルとして、我々は変数を提供している場合、ラベルは定数式でなければならない場合は、ここではケースのラベルが一定でなければならないのはなぜ定数変数が
存在しているコードである理由表現の場合は、コンパイラがOracle認証(OCA)訓練文書から場合は、コンパイラはコンパイルエラーに

Class Test 
    { 
    public static void main(String[] args) 
     { 
      int a =10 ,b=20 ,c=30 ; //Here i give constant value 
      switch(a){ 

      case a : System.out.println("10"); 
        break; 
      case b : System.out.println("20"); 
        break; 
      case c : System.out.println("30"); 
        break; 
      default : System.out.println("Default Statement "); 
        } 
     } 


    } 

答えて

0

コンパイルエラーが発生しますラベルとして、私たちは、変数を提供している場合:

スイッチとケースための

法的表現

スイッチの一般的な形式の文は、ケース定数は1で、スイッチ式が使用できるのと同じ型に評価しなければならない

switch (expression) { 
    case constant1: code block 
    case constant2: code block 
    default: code block 
} 

です追加制約と大きな制約:大文字小文字の定数はコンパイル時定数でなければなりません! case引数はコンパイル時に解決されなければならないので、リテラル値で直ちに初期化される定数または最終変数のみを使用できます。最終的には不十分です。それはコンパイル時定数でなければなりません。

働いているものの例とものではありません:あなたのケースでは

final int a = 1; 
final int b; 
b = 2; 
int x = 0; 
switch (x) { 
    case a: // ok 
    case b: // compiler error 
} 

、使用:値を再び変更するべきではありませんJavaの定数手段で

final int a=10, b=20, c=30; 
+0

クラスTest {公共の静的な無効メイン(文字列[]引数) \t {\t \t最終int型、A = 10、B = 20、C = 30。 \t \tスイッチ(A){ \t \t \t \t場合:のSystem.out.println( "10"); \t \t \t \t break; \t \tケースb:System.out.println( "20"); \t \t \t \t break; \t \tケースc:System.out.println( "30"); \t \t \t \t break; \t \tデフォルト:System.out。println( "Default Statement"); \t \t \t \t} \t} } – fool

+0

私はこれを置くが、エラー – fool

+0

が、私は[compilejava.net](https://www.compilejava.net/)オンラインJavaコンパイラでのコメントコードをコピー&ペースト取得。コンパイル結果は 'Successfully compiled /tmp/java_PTfJ0q/Test.java < - main method'であり、実行結果は' 10'です。あなたの質問はあなたが使用しているJavaバージョンを示していません。私はJava 7または8を使用しました。これらのバージョンでは、動作するようです。 – Wis

0

最終的にというキーワードを変数の前に置くと、それらはjavaのために一定になり、コンパイラはそれにエラーを与えません。

final int a =10 ,b=20 ,c=30 ; //Here i give constant value 
関連する問題