2016-12-16 7 views
4

それはこの1つのようなコードの断片を書くために、最近私に起こった:その後このJavaコードの意味は何ですか?

switch (x) { 
    case a: case b: case c: 
    // do something 
    break; 
    case d: case e: case f: 
    // do something 
    break; 
} 

、私は間違って持って、構文エラーと同様のコードを書いた:私は、ケースのキーワードを書くのを忘れ:

switch (x) { 
    case a: b: c: 
    // do something 
    break; 
    case d: e: f: 
    // do something 
    break; 
} 

この構文は実際には有効なであり、スイッチはすべての値を通過します。

実際には、構文エラーは発生しませんでしたが、スイッチをスムーズに実行していたプログラムで間違った動作があったため、caseキーワードなしの値が欠けていました。

なぜですか? bは何をするのですか? c :, e:とf:2回目の切り札の平均?

多分ラベルですか?そして、彼らはどうすれば同じ行にいるのでしょうか?私はこの奇妙な非エラーの背後にある私が理解していないことは何が分からないのですか?

編集:実際にはのラベルのようです。それは珍しいことであり、@ Bathshebaが説明したように、問題はラベルが一般に行の先頭にあるということです。どのようにJavaがそのような混乱を(私の考えでは)シンタックスで許可するのか、警告を表示しなくても奇妙です。 これは長いプログラムで本当にたくさんの混乱と奇妙なエラーを引き起こす可能性があります。

ありがとうございます。

+1

10秒で-2が得られた理由を知ることができますか?この質問で何が間違っていますか?私は、Javaのシンタックスについてもっと深く理解しようとしています。 –

+0

私はこの質問が好きです。良いコードスニペットでうまくいきます。 – Bathsheba

+0

グーグルで「スイッチの仕組みがどのように機能するのか」という答えが得られたからです。基本的にあなたが質問した質問、なぜ構文が壊れているコードが動作していないのですか? Answer:構文が壊れています。 – DejaVuSansMono

答えて

5
第2のケースで

b:c:e:、及びf:ラベルあります。あなたはJavaのラベルにbreakを許可されています。言語によって、あなたが持っている場所を含め、あらゆる場所にラベルを挿入することができます。

ラベルが行の先頭から始まっていないのは珍しいことです。それだけです。

+1

同じ行と同じブロック内のラベルは見た目にスタック可能です* –

+0

私は恐れそうです;-( – Bathsheba

+0

、Javaの誕生以来、彼らは明確な構文とパターンを使用するように義務づけて、通常のエラーを避けるために、それは非常に奇妙なそのような異常な構文のひねりを見つけるために、 –

関連する問題