括弧付きの文が有効ではありません

Ubiux;

これはJavaで有効である理由誰かが私に言うことができます。

for (int i= 1; i<11; i++){
       Movie movie = randomMovie();
}

これはないでしょうか?

for (int i= 1; i<11; i++)
      Movie movie = randomMovie();

私にはまったく同じものだそうですので、私はそれを得ることはありませんが、私は中括弧を入れたときに、それが突然、正しいなります。

ここでは、画像の説明を入力します。

スティーブンC:

Javaの文法は、後者を禁止しているため。関連する文法規則は以下のとおりです。

BasicForStatement:
    for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement 

Statement:
    StatementWithoutTrailingSubstatement
    LabeledStatement
    IfThenStatement
    IfThenElseStatement
    WhileStatement
    ForStatement

StatementWithoutTrailingSubstatement:
    Block
    EmptyStatement
    ExpressionStatement
    AssertStatement
    SwitchStatement
    DoStatement
    BreakStatement
    ContinueStatement
    ReturnStatement
    SynchronizedStatement
    ThrowStatement
    TryStatement

上記の含まれていないことに注意LocalVariableDeclarationStatement

あなたにはJavaのための完全な構文文法を見つけることができますJLS第19章


あなたのための仮想的な質問です。次のコードは、有効なJavaであると仮定すると:

for (int i = 1; i < limit; i++)
     Movie movie = randomMovie();
System.out.println("The last movie is " + movie);

範囲何かmovie変数は?

答えは範囲すぐに外に出なければならないということである1それ作る無用宣言、および用法でのprintln呼び出しがコンパイルエラーです。

私は信じて、これは、彼らがこれを許可しないようにJava構文を指定している理由であること。宣言は無用で、最も可能性の高い間違い、およびコンパイルエラーを経由してプログラマの注意を喚起しなければなりません。

(同じ引数で宣言で

for (int i = 1; i < 11; i++){
     Movie movie = randomMovie();
}

また、間違いです。しかし、言語の文法でこれについて何かを行うことは難しいでしょう。)


1 -代替は批判に耐えられるではありません。Javaのような静的チェックした言語では、スコープ内の変数だけ早く実行パスに応じて、存在している状況を持つことはできません。これは、の値が考えmovieている場合もlimitゼロでしたか?

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=364394&siteId=1