5

最近、に関する特別な構文を使用するコードを読み{}ました。経験豊富なJava開発者に質問しましたが、彼も答えることができません。

public void doSomething() {
    someWorks();
    {
        someVariables;
        someMoreWorks();
    }
    someEvenWorks();
    {
        ...
    }
}

コード作成者がこれらの行を内部に配置するのはなぜ{}ですか?内で宣言された変数は、{}実行が終了した直後に解放されると思います。これ{}は、外部からアクセスできなくなったため{}です。

4

3 に答える 3

6

はい、唯一の違いはスコーピングです。

場合によっては、これは、ブロックを切り取って貼り付け、小さな変更を加えてから、ブロックを並べ替えることができるマイクロベンチマークなどの使い捨てコードに役立つことがあります。

しかし、「実際の」コードでこのようなものを使用することはめったにありません。

于 2011-09-07T13:49:00.147 に答える
4

これにより、「よりローカルな」変数を宣言するためのネストされたスコープが提供されます。

{}内で宣言された変数は、{}の終了直後に解放されると思います。これは、{}の外部でこれらの変数にアクセスできなくなったためです。

「リリース」の定義によって異なります(メソッドが終了するまでガベージコレクションされない可能性が高いため、これが重要な場合は、それらを無効にすることをお勧めします)が、はい。

中括弧のその他のめったに見られない使用法には、クラスおよびインスタンスの初期化子が含まれます。

class A {
   static {
      // some class initialization code
   }

   {
      // some instance initialization code
   }

 }
于 2011-09-07T13:49:41.443 に答える
1

作成者がこれらの変数を{}に配置したという事実は、これらの変数のスコープが{}で定義されたメソッドのスコープのみであることを示しています。次に、メソッドが実行を終了すると、これらの変数はガベージコレクションに使用されます。

于 2011-09-07T13:54:43.093 に答える