StatementExpressionList 和 LocalVariableDeclaration 都在页面的其他位置定义。我将它们复制在这里:
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
进一步遵循语法没有多大意义;我希望它很容易阅读。
这意味着您可以在ForInit 部分中或者拥有以逗号分隔的任意数量的StatementExpressions,或LocalVariableDeclaration。 LocalVariableDeclaration 可以由任意数量的“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。
由于StatementExpressionList 在 for 循环的更新部分是允许的,所以这也是有效的:
int i = 0;
String str = "Hello";
for (;;str = "hi", i++, ++i, sayHello(), new MyClass()) { }
你开始看照片了吗?