我的问题是关于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中使用的表示法-这是有原因的”。感谢您的所有答案。
最佳答案
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
进一步遵循语法没有多大意义。我希望它足够容易阅读。
这意味着您可以在
StatementExpressions
部分中使用任意数量的LocalVariableDeclaration
(用逗号分隔)或ForInit
。 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
。而且由于for循环的更新部分允许使用
StatementExpressionList
,因此这也是有效的:int i = 0;
String str = "Hello";
for (;;str = "hi", i++, ++i, sayHello(), new MyClass()) { }
您开始拍摄照片了吗?