4

これを正確に検索するのはちょっと難しいです。私はこれをいくつかの場所で見たことがあり、それがどのように機能するかを確認するためにコードで試してみましたが、それらがどのように使用できるかを正確に知り、悪用しないようにするために、私は尋ねると思いました.ここに。

 public void doSomethingSpecial()
 {

      String strHello = null;

      // What is the following section in braces for
      {
           strHello = "Hello World"
      }

      for(int i = 0; i < 10; i++)
      {

           //  What is the significance of them it in a loop?
           {
                strHello = "Hello";
                // Do something else...
           }
           .
           .
           .
      }
 }
  • 誰かがこれらのブレースブロックブレースの目的を明確にできますか?
  • それらはメソッドのように機能し、ブロックの外側で指定されていない限り、範囲を制限すると思いますが、別の用途はありますか?
  • それらの正確な名前は何ですか?

前もって感謝します

4

3 に答える 3

2

中かっこはスコープを定義します。たとえば、中かっこ内でローカル変数を定義し、次のように値を代入するとします。

{
int foo = 10;

}

次に、foo のスコープ (つまり、foo が定義され、値を持つコードのセクション) は、中かっこ内の領域に制限されます。

同じことが for ループにも当てはまります。これらの中かっこ内では、カウンター i が定義され、意味がありますが、外側では意味がありません。したがって、このコードはコンパイルされません。

for (int i = 0; i < 5; i++) {
  // Do something with i
}

i = 10; // Won't compile. i is undefined as a variable.

さまざまな変数のスコープを正確に制御できるという点で、この利点は数多くあります。例外処理のコンテキストで例外などの範囲を定義することもできます。

次のようなこともできます。

int i = 0;

for (; i < 5; i++) {
  // Do something with i.
}

for (; i < 10; i++) {
  // Do something else with i
}

この場合、 i はより大きなスコープ スペース (外側のメソッドまたはコンストラクターのスコープ スペース) で定義され、for ループはその値をインクリメントするだけです。したがって、2 つの異なる範囲の領域間で変数を共有しています。

最後に、クラスの初期化ブロックとして、メソッドまたはコンストラクターの外でそれらを使用できます。たとえば、1 行のコードでは簡単に初期化できないメンバー変数を初期化できます。

于 2013-04-24T14:53:03.110 に答える