Java - 为什么我不能在for循环之外初始化变量的起始值?

时间:2013-08-14 17:33:12

标签: java for-loop

我有没有理由不能在for循环之外初始化变量的起始值?当我这样做时:

    public static void main(String[] args) {

    int userInt = 1;
    int ender = 10;

    for (userInt; userInt < ender; userInt++) {
        System.out.println(userInt);

我收到一个语法错误,指出需要为userInt分配一个值,即使我已经为其指定了值1.当我这样做时:

public static void main(String[] args) {

    int userInt;
    int ender = 10;

    for (userInt = 1; userInt < ender; userInt++) {
        System.out.println(userInt);

错误消失了。这是什么原因?

2 个答案:

答案 0 :(得分:7)

Java for loop的通用语法如下:

for ( {initialization}; {exit condition}; {incrementor} ) code_block;

这意味着你不能只在inizalization块中写下变量名。如果你想使用一个已定义的变量,你只需要它就可以了。

这应该适合你:

for (; userInt < ender; userInt++) {
        System.out.println(userInt);
}

答案 1 :(得分:3)

问题是for语句需要表达式。

根据language spec

ForStatement:
    BasicForStatement
    EnhancedForStatement

然后:

BasicForStatement:
    for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement

ForStatementNoShortIf:
    for ( ForInitopt ; Expressionopt ; ForUpdateopt ) StatementNoShortIf

ForInit:
    StatementExpressionList
    LocalVariableDeclaration

ForUpdate:
    StatementExpressionList

StatementExpressionList:
    StatementExpression
    StatementExpressionList , StatementExpression

当你看到基本的for语句时,第一个元素是可选的初始化,它是语句或局部变量声明

声明是以下之一:

StatementExpression:
    Assignment
    PreIncrementExpression
    PreDecrementExpression
    PostIncrementExpression
    PostDecrementExpression
    MethodInvocation
    ClassInstanceCreationExpression

在您的示例中,userInt = 1Assignment,而userInt只与StatementExpression列表中的任何元素都不匹配,这会导致编译错误。