What can be in the parentheses of a Java for loop?

My question is about Java for statements, such as

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

What I don't understand is how much code / what kind of code I can put in parentheses (i.e. I have int i = 0; I < 10; I'm in my example) - I really don't understand the language used to describe it: http://java.sun.com/docs/books/jls/third_edition/html/statements.html#24588

Basically, my problem boils down to requiring bits in the translation specification to look like:

ForInit: StatementExpressionList LocalVariableDeclaration

Editor: Wow I think the real answer is "learn to read and understand the symbols used in JLS - it is used for some reason." Thank you for all your answers

Solution

Statementexpressionlist and localvariabledeclaration are defined elsewhere on the page I'll copy them here:

StatementExpressionList:
        StatementExpression
        StatementExpressionList,StatementExpression

StatementExpression:
        Assignment
        PreIncrementExpression
        PreDecrementExpression
        PostIncrementExpression
        PostDecrementExpression
        MethodInvocation
        ClassInstanceCreationExpression

and

LocalVariableDeclaration:
        VariableModifiers Type VariableDeclarators

VariableDeclarators:
        VariableDeclarator
        VariableDeclarators,VariableDeclarator

VariableDeclarator:
        VariableDeclaratorId
        VariableDeclaratorId = VariableInitializer

VariableDeclaratorId:
        Identifier
        VariableDeclaratorId [ ]

VariableInitializer:
        Expression
        ArrayInitializer

It doesn't make much sense to follow grammar further; I hope it's easy to read

This means that you can use any number of statementexpressions (separated by commas) or localvariabledeclaration. In the forinit section Localvariabledeclaration can consist of any number of "variable = value" pairs, separated by commas and starting with their types

So this is legal:

for (int i = 0,j = 0,k = 0;;) { }

Because "int i = 0, k = 0" is a valid localvariabledeclaration This is legal:

int i = 0;
String str = "Hello";
for (str = "hi",i++,++i,sayHello(),new MyClass();;) { }

Because all random content in the initializer conforms to statementexpressions

Since statementexpressionlist is allowed in the update part of the for loop, it is also valid:

int i = 0;
String str = "Hello";
for (;;str = "hi",new MyClass()) { }

Did you start taking pictures?

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>