大括号中的语句无效

问题描述 投票:1回答:2

有人可以告诉我为什么这在Java中有效:

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

这不是吗?

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

我不明白,因为对我来说这似乎是完全相同的事情,但是当我戴上花括号时,它突然变得正确了。

enter image description here

java syntax
2个回答
0
投票

检查是否可行。

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

0
投票

因为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

您可以在JLS Chapter 19中找到Java的完整语法语法。


您的假设性问题。假设以下代码是有效的Java:

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

movie变量的范围是什么?

答案是必须立即超出范围1。这使它成为useless声明,并且println调用中的用法是编译错误。

I believe,这是他们指定Java语法禁止这样做的原因。该声明是无用的,很可能是错误的,应该通过编译错误引起程序员注意。

(使用相同的参数,在]中进行声明>

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

也是一个错误。但是用语言语法对此做一些事情很困难。)


1-替代方案不成立。在像Java这样的静态检查语言中,不能存在仅根据较早的执行路径而存在范围内变量的情况。如果movie为零,那limit的值就是吗?

© www.soinside.com 2019 - 2024. All rights reserved.