有人可以告诉我为什么这在Java中有效:
for (int i= 1; i<11; i++){
Movie movie = randomMovie();
}
这不是吗?
for (int i= 1; i<11; i++)
Movie movie = randomMovie();
我不明白,因为对我来说这似乎是完全相同的事情,但是当我戴上花括号时,它突然变得正确了。
检查是否可行。
Movie movie = null;
for (int i= 1; i<11; i++)
movie = randomMovie();
因为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
的值就是吗?