一个单行循环,在Java中有一对强制括号

Tin*_*iny 23 java loops

以下代码段中的代码工作得很好.它计算使用类型的静态字段创建的对象的数量intcnt.

public class Main
{
    private static int cnt;

    public Main()
    {
        ++cnt;
    }

    public static void main(String[] args)
    {
        for (int a=0;a<10;a++)
        {
            Main main=new Main();
        }

        /*for (int a=0;a<10;a++)
            Main main=new Main();*/

        System.out.println("Number of objects created : "+cnt+"\n\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

它显示以下输出.

Number of objects created : 10
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,当我从上面的for循环中删除这对花括号时(参见注释for循环),会发出编译时错误

不是声明.

为什么在这种特殊情况下,即使循环只包含一个语句,也必须使用一对括号?

aio*_*obe 28

声明变量时(main在本例中):

Main main = new Main();
Run Code Online (Sandbox Code Playgroud)

它不算作声明,即使它有副作用.因为它是一个恰当的陈述,你应该这样做

new Main();
Run Code Online (Sandbox Code Playgroud)

那么为什么呢

... {
    Main main = new Main();
}
Run Code Online (Sandbox Code Playgroud)

允许?{ ... }是一个代码块,并不会算作一个声明.在这种情况下,main变量可以在声明之后但在结束括号之前使用.有些编译器忽略了它确实没有被使用的事实,其他编译器会对此发出警告.