2

以下是一个有效的 Java 程序:

public class _ {

    public static void main(String[] args) {
        {
            {
                {
                    {

                    }
                }
            }
        }
    }

}

那些花括号会增加额外的语义吗?还是他们像空白一样对待?

4

4 回答 4

9

花括号只是在你的 main 方法中创建一个本地块作用域。在块内声明的变量在块外将不可见。

这种编码方式用于最小化局部变量的范围。

public void someMethod() {
    {
        int x = 10;
        System.out.println(x); // Ok
    }
    System.out.println(x); // Error, x not visible here
}

最小化您创建的局部变量的范围是一个很好的做法,特别是当您知道它们不会在程序中的其他任何地方使用时。所以,让它在更大的范围内直到它结束是没有意义的。只需创建一个本地块作用域,这样它就可以Garbage Collection在块结束后立即使用。

另请参阅@Bohemian's下面的答案,该答案还引用了另一个好处。

于 2012-10-30T18:28:53.970 回答
4

它们是一个代码块。在复制粘贴包含局部变量声明的代码时,它们会很方便:

{
    int x = foo * bar;
    someMethod(x);
}
{
    int x = foo * y; // won't get "already defined variable" compile error
    someMethod(x);
}

我还看到它们用于代码生成,因此您可以安全地向方法中添加一些代码并定义一个变量,而不必担心它是否已在方法的前面定义。

于 2012-10-30T18:36:39.117 回答
1

The only purpose of the extra braces is to provide scope-limit. The variable a

void ad()
    {
    int a;
    }

will only exist within those braces, and will have no scope outside of them.

于 2012-10-30T18:32:34.490 回答
1

花括号旨在定义和限制范围。由于它们不包含任何语句或声明,它们将被编译器消除。

于 2012-10-30T18:31:15.553 回答