2

以下は有効なJavaプログラムです。

public class _ {

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

                    }
                }
            }
        }
    }

}

それらの中括弧は余分なセマンティクスを追加しますか?それとも、空白のように扱われますか?

4

4 に答える 4

9

中括弧は、メインメソッド内にローカルブロックスコープを作成するだけです。ブロック内で宣言された変数は、外部には表示されません。

このコーディング方法は、ローカル変数のスコープを最小化するために使用されます。

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

作成するローカル変数の範囲を最小限に抑えることをお勧めします。特に、プログラム内の他の場所で使用されないことがわかっている場合はそうです。したがって、それが終了するまで、それをより大きなスコープに入れることは意味がありません。Garbage Collectionローカルブロックスコープを作成するだけで、ブロックが終了するとすぐに対象になります。

また@Bohemian's、もう1つの利点を引用している以下の回答も参照してください。

于 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

中括弧は、範囲を定義および制限するためのものです。これらはステートメントや宣言を含まないため、コンパイラーによって削除されます。

于 2012-10-30T18:31:15.553 に答える
1

追加の中括弧の唯一の目的は、スコープ制限を提供することです。変数a

void ad()
    {
    int a;
    }

それらの中括弧内にのみ存在し、それらの外側にはスコープがありません。

于 2012-10-30T18:32:34.490 に答える