微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中的对象创建语句不允许使用单行循环为什么?

如何解决Java中的对象创建语句不允许使用单行循环为什么?

要了解为什么会发生这种情况,您必须查看语言规范中Java的Blocks和Statements语法

ForStatement定义为:

ForStatement:
    for ( ForInitopt ; Expressionopt ; ForUpdateopt )
        Statement

声明定义为:

Statement:
    StatementWithoutTrailingSubstatement
    LabeledStatement
    IfThenStatement
    IfThenElseStatement
    WhileStatement
    ForStatement

StatementWithoutTrailingSubstatement:
    Block
    EmptyStatement
    ExpressionStatement
    SwitchStatement
    DoStatement
    BreakStatement
    ContinueStatement
    ReturnStatement
    SynchronizedStatement
    ThrowStatement
    TryStatement

然后,查看Block:

Block:
    { BlockStatementsopt }

BlockStatements:
    BlockStatement
    BlockStatements BlockStatement

BlockStatement:
    LocalVariableDeclarationStatement
    ClassDeclaration
    Statement

您会注意到,在此规范内,LocalVariableDeclarationStatement无效,除非它在一个块中。但是,由于ForStatement要求在其后加上一条语句,因此必须存在括号才能使表达式有效。这样,在没有括号的情况下,任何局部变量声明在循环中都是无效的。

解决方法

以下程序本身并不重要。它只使用类Counter内部的静态字段,通过使用for循环来计算创建的对象数,如下所示。

package temp;

final class Counter
{
    private static int cnt;

    public Counter()
    {
        cnt++;
    }

    public static int show()
    {
        return(cnt);
    }
}

final public class Main
{
    public static void main(String[] args)
    {
        for (int i=0;i<50;i++)
        {
            Counter counter=new Counter();
        }

        /*for (int i=0;i<50;i++)
            Counter counter=new Counter();*/

        System.out.print("\nNumber of objects constructed:->"+Counter.show()+"\n\n");
    }
}

唯一的问题是,注释的for循环的含义与上述for循环的含义相同(同一事实也适用于while循环)根本不起作用,从而导致指示“ 不是语句
的编译时错误。意味着在这种特殊情况下,即使for循环仅包含一个语句,一对括号也是必须的!为什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。