什么类型的语句在Java'for loop'增量器中是合法的?

时间:2012-03-29 09:38:59

标签: java variables loops for-loop declaration

在学习OCP Java程序员考试时,我有点惊讶地发现这是合法的语法:

for(int i = 0; i < 3; i++, System.out.print("howdy ")) ;

这让我思考!在测试一些类似的东西时,我发现这不能编译:

for(;; int j = 0) ;

找不到太多关于此的信息。任何人都可以提供参考或解释为什么在增量器部分中声明一个新变量不能编译但其他语句(方法调用等)呢?它是(仅用于循环范围)变量声明还是此处不允许的任何其他类型的语句?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

许多语句都是有效的(请参阅alexei提供的链接),但是您必须查看表达式的范围才能理解为什么这种初始化不起作用:

范围是for循环的所有迭代(而不是每次的新范围)。第一部分只执行一次,但第二部分和第三部分在每个循环结束时执行。因此,如果您在第三部分中声明了声明,则会多次声明(不允许)。

答案 2 :(得分:1)

完整的说明可以在Java Language Specs, chapter 14.14.1

中找到

摘录:

BasicForStatement:
    for ( ForInit_opt ; Expression_opt ; ForUpdate_opt ) Statement

ForInit:
    StatementExpressionList
    LocalVariableDeclaration

ForUpdate:
    StatementExpressionList

StatementExpressionList:
    StatementExpression
    StatementExpressionList , StatementExpression

所有三个“部分”都是可选的,ForInit和ForUpdate是表达式列表,其中每个语句都用逗号表示。