LocalVariableDeclaration

LocalVariableDeclaration

我的问题是关于Java for语句的,例如

for (int i = 0; i < 10; ++i) {/* stuff */}

我不明白的是我可以在括号中放入多少代码/什么样的代码(例如,示例中我有int i = 0; i < 10; ++i的地方)-我真的不明白这里用来描述它的语言:

http://java.sun.com/docs/books/jls/third_edition/html/statements.html#24588

基本上,我的问题归结为要求规范中的位翻译如下:

ForInit:
StatementExpressionList
LocalVariableDeclaration

编辑:哇。我想真正的答案是“学会阅读和理解JLS中使用的表示法-这是有原因的”。感谢您的所有答案。

最佳答案

StatementExpressionListLocalVariableDeclaration都在页面的其他位置定义。我将在这里复制它们:

StatementExpressionList:
        StatementExpression
        StatementExpressionList , StatementExpression

StatementExpression:
        Assignment
        PreIncrementExpression
        PreDecrementExpression
        PostIncrementExpression
        PostDecrementExpression
        MethodInvocation
        ClassInstanceCreationExpression


LocalVariableDeclaration:
        VariableModifiers Type VariableDeclarators

VariableDeclarators:
        VariableDeclarator
        VariableDeclarators , VariableDeclarator

VariableDeclarator:
        VariableDeclaratorId
        VariableDeclaratorId = VariableInitializer

VariableDeclaratorId:
        Identifier
        VariableDeclaratorId [ ]

VariableInitializer:
        Expression
        ArrayInitializer

进一步遵循语法没有多大意义。我希望它足够容易阅读。

这意味着您可以在StatementExpressions部分中使用任意数量的LocalVariableDeclaration(用逗号分隔)或ForInitLocalVariableDeclaration可以由任意数量的以逗号分隔的“variable = value”对组成,并以其类型开头。

所以这是合法的:
for (int i = 0, j = 0, k = 0;;) { }

因为“int i = 0, j = 0, k = 0”是有效的LocalVariableDeclaration。这是合法的:
int i = 0;
String str = "Hello";
for (str = "hi", i++, ++i, sayHello(), new MyClass();;) { }

因为初始化程序中所有这些随机的东西都称为StatementExpressions

而且由于for循环的更新部分允许使用StatementExpressionList,因此这也是有效的:
int i = 0;
String str = "Hello";
for (;;str = "hi", i++, ++i, sayHello(), new MyClass()) { }

您开始拍摄照片了吗?

08-19 03:02