Comunicado con los apoyos no es válida

Ubiux;

¿Puede alguien decirme por qué esto es válido en Java:

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

y esto no es?

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

Yo no lo entiendo, porque me parece que es exactamente lo mismo, pero cuando pongo las llaves, que de repente se vuelve correcto.

introducir descripción de la imagen aquí

Stephen C:

Debido a que la gramática de Java prohíbe este último. Las reglas gramaticales relevantes son:

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

Tenga en cuenta que lo anterior no incluyen LocalVariableDeclarationStatement.

Puede encontrar la gramática sintáctica completa para Java en JLS Capítulo 19 .


hipotética pregunta para usted. Suponiendo que el siguiente código es válido de Java:

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

¿cuál es el alcance de la movievariable?

La respuesta es que es debe salir del alcance inmediato 1 . Lo cual lo convierte en un inútil declaración, y el uso de la printlnllamada es un error de compilación.

Yo creo que esta es la razón por la que especifican la sintaxis de Java para no permitir esto. La declaración es inútil y lo más probable es un error, y debe ser puesta en conocimiento del programador a través de un error de compilación.

(Por el mismo argumento en la declaración

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

También es un error. Pero hacer algo sobre esto en la gramática de la lengua sería difícil.)


1 - La alternativa no es sostenible. En un lenguaje estáticamente comprobado como Java, no se puede tener una situación donde sólo una variable dentro del alcance existe en función de una ruta de ejecución anterior. Eso sería el valor de movieser si limitera cero?

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=364397&siteId=1
Recomendado
Clasificación