在 Java 中具有一对强制大括号的单行循环

2022-09-01 23:08:11

以下代码段中的代码工作正常。它计算使用静态字段创建的对象数,该字段的类型为 。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");
    }
}

它显示以下输出。

Number of objects created : 10

唯一的问题是,当我从上面的循环中删除一对大括号时(请参阅注释的循环),会发出编译时错误,指示forfor

不是声明。

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


答案 1

当您声明一个变量时(在本例中):main

Main main = new Main();

它不算作一个陈述,即使它有副作用。为了成为一个正确的陈述,你应该做

new Main();

那么为什么是

... {
    Main main = new Main();
}

允许? 是一个代码块,并且作一个语句。在这种情况下,该变量可以在声明之后使用,但在右大括号之前使用。一些编译器忽略了它确实未被使用的事实,其他编译器会发出有关此的警告。{ ... }main


答案 2

使用新语句创建单行块是有意义的。没有意义的是将对刚刚创建的对象的引用保存在单行块内,因为您无法从for范围之外访问变量main。

也许(只是我的猜测)编译器会强制您显式键入括号,因为在这种情况下保留引用是没有意义的,希望您能够意识到无用的引用。


推荐